Skip to content

Commit

Permalink
PDFBOX-5947: support Graph and Tag, Pushpin is the default
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1923637 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
THausherr committed Feb 7, 2025
1 parent bd71b8e commit bd5e322
Showing 1 changed file with 149 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,22 @@ public void generateNormalAppearance()
annotation.setRectangle(rect);
annotation.getNormalAppearanceStream().setBBox(new PDRectangle(size, size));

//TODO support Graph, Tag
// test case: pdf_commenting_new.pdf page 7
String attachmentName = annotation.getAttachmentName();
switch (attachmentName)
{
case "PushPin":
drawPushPin(contentStream);
break;
case "Paperclip":
default:
drawPaperclip(contentStream);
break;
case "Graph":
drawGraph(contentStream);
break;
case "Tag":
drawTag(contentStream);
break;
default:
drawPushPin(contentStream);
break;
}
}
catch (IOException e)
Expand Down Expand Up @@ -178,6 +182,146 @@ private void drawPushPin(final PDAppearanceContentStream contentStream) throws I
contentStream.fill();
}

private void drawGraph(final PDAppearanceContentStream contentStream) throws IOException
{
// ty 18 is from the caller, scale 0.022 is by trial and error
contentStream.transform(new Matrix(0.022f, 0, 0, -0.022f, 0f, 18f));

// Source: https://www.svgrepo.com/svg/339018/chart-histogram
// Author: Carbon Design https://github.com/carbon-design-system/carbon
// License: Apache
contentStream.transform(Matrix.getTranslateInstance(736.04f, 907.89f));
contentStream.moveTo(0f, 0f);
contentStream.lineTo(-675.23f, 0f);
contentStream.curveTo(-679.72f, 0f, -683.41f, -3.53f, -683.41f, -8.01f);
contentStream.lineTo(-683.41f, -683.37f);
contentStream.lineTo(-667.22f, -683.37f);
contentStream.lineTo(-667.22f, -353.95f);
contentStream.curveTo(-583.85f, -357.8f, -541.53f, -419.99f, -500.49f, -480.27f);
contentStream.curveTo(-459.93f, -539.74f, -418.09f, -601.46f, -337.61f, -601.46f);
contentStream.curveTo(-257.14f, -601.46f, -215.3f, -539.74f, -174.74f, -480.27f);
contentStream.curveTo(-132.58f, -418.07f, -88.81f, -353.79f, 0f, -353.79f);
contentStream.lineTo(0f, -337.6f);
contentStream.curveTo(-97.31f, -337.6f, -143.48f, -405.41f, -188.2f, -471.13f);
contentStream.curveTo(-228.12f, -529.8f, -265.8f, -585.27f, -337.61f, -585.27f);
contentStream.curveTo(-409.43f, -585.27f, -447.11f, -529.8f, -487.03f, -471.13f);
contentStream.curveTo(-530.47f, -407.33f, -575.36f, -341.45f, -667.22f, -337.76f);
contentStream.lineTo(-667.22f, -16.19f);
contentStream.lineTo(-615.76f, -16.19f);
contentStream.lineTo(-615.76f, -255.68f);
contentStream.curveTo(-615.76f, -260.17f, -612.23f, -263.7f, -607.74f, -263.7f);
contentStream.lineTo(-525.82f, -263.7f);
contentStream.lineTo(-525.82f, -345.77f);
contentStream.curveTo(-525.82f, -350.26f, -522.13f, -353.79f, -517.64f, -353.79f);
contentStream.lineTo(-435.73f, -353.79f);
contentStream.lineTo(-435.73f, -458.31f);
contentStream.curveTo(-435.73f, -462.8f, -432.2f, -466.32f, -427.71f, -466.32f);
contentStream.lineTo(-337.61f, -466.32f);
contentStream.curveTo(-333.13f, -466.32f, -329.6f, -462.8f, -329.6f, -458.31f);
contentStream.lineTo(-329.6f, -421.28f);
contentStream.lineTo(-247.68f, -421.28f);
contentStream.curveTo(-243.19f, -421.28f, -239.5f, -417.75f, -239.5f, -413.26f);
contentStream.lineTo(-239.5f, -331.35f);
contentStream.lineTo(-157.58f, -331.35f);
contentStream.curveTo(-153.1f, -331.35f, -149.41f, -327.66f, -149.41f, -323.17f);
contentStream.lineTo(-149.41f, -218.81f);
contentStream.lineTo(-67.49f, -218.81f);
contentStream.curveTo(-63.0f, -218.81f, -59.47f, -215.13f, -59.47f, -210.64f);
contentStream.lineTo(-59.47f, -16.19f);
contentStream.lineTo(0f, -16.19f);
contentStream.lineTo(0f, 0f);
contentStream.closePath();
contentStream.moveTo(-149.41f, -16.19f);
contentStream.lineTo(-75.67f, -16.19f);
contentStream.lineTo(-75.67f, -202.62f);
contentStream.lineTo(-149.41f, -202.62f);
contentStream.lineTo(-149.41f, -16.19f);
contentStream.closePath();
contentStream.moveTo(-239.5f, -16.19f);
contentStream.lineTo(-165.76f, -16.19f);
contentStream.lineTo(-165.76f, -315.16f);
contentStream.lineTo(-239.5f, -315.16f);
contentStream.lineTo(-239.5f, -16.19f);
contentStream.closePath();
contentStream.moveTo(-329.6f, -16.19f);
contentStream.lineTo(-255.7f, -16.19f);
contentStream.lineTo(-255.7f, -405.09f);
contentStream.lineTo(-329.6f, -405.09f);
contentStream.lineTo(-329.6f, -16.19f);
contentStream.closePath();
contentStream.moveTo(-419.53f, -16.19f);
contentStream.lineTo(-345.79f, -16.19f);
contentStream.lineTo(-345.79f, -450.13f);
contentStream.lineTo(-419.53f, -450.13f);
contentStream.lineTo(-419.53f, -16.19f);
contentStream.closePath();
contentStream.moveTo(-509.63f, -16.19f);
contentStream.lineTo(-435.73f, -16.19f);
contentStream.lineTo(-435.73f, -337.6f);
contentStream.lineTo(-509.63f, -337.6f);
contentStream.lineTo(-509.63f, -16.19f);
contentStream.closePath();
contentStream.moveTo(-599.56f, -16.19f);
contentStream.lineTo(-525.82f, -16.19f);
contentStream.lineTo(-525.82f, -247.51f);
contentStream.lineTo(-599.56f, -247.51f);
contentStream.lineTo(-599.56f, -16.19f);
contentStream.closePath();
contentStream.fill();
}

private void drawTag(final PDAppearanceContentStream contentStream) throws IOException
{
// ty 18 is from the caller, scale 0.022 is by trial and error
contentStream.transform(new Matrix(0.022f, 0, 0, -0.022f, 0f, 18f));

// Source: https://www.svgrepo.com/svg/29652/tag
// License: CC0
contentStream.saveGraphicsState();
contentStream.transform(Matrix.getTranslateInstance(209.26f, 128.32f));
contentStream.moveTo(0f, 0f);
contentStream.curveTo(-44.73f, 0f, -80.64f, 36.23f, -80.64f, 80.64f);
contentStream.curveTo(-80.64f, 125.2f, -44.57f, 161.27f, 0f, 161.27f);
contentStream.curveTo(44.56f, 161.27f, 80.47f, 125.04f, 80.47f, 80.64f);
contentStream.curveTo(80.63f, 36.07f, 44.56f, 0f, 0f, 0f);
contentStream.closePath();
contentStream.moveTo(0f, 132.74f);
contentStream.curveTo(-28.7f, 132.74f, -52.1f, 109.33f, -52.1f, 80.64f);
contentStream.curveTo(-52.1f, 51.94f, -28.7f, 28.54f, 0f, 28.54f);
contentStream.curveTo(28.69f, 28.54f, 51.93f, 51.94f, 51.93f, 80.64f);
contentStream.curveTo(51.93f, 109.33f, 28.85f, 132.74f, 0f, 132.74f);
contentStream.closePath();
contentStream.fill();
contentStream.restoreGraphicsState();
contentStream.saveGraphicsState();
contentStream.transform(Matrix.getTranslateInstance(382.22f, 79.91f));
contentStream.moveTo(0f, 0f);
contentStream.curveTo(-14.58f, -16.19f, -35.1f, -24.85f, -57.22f, -24.85f);
contentStream.lineTo(-208.23f, -26.45f);
contentStream.curveTo(-240.45f, -26.45f, -271.23f, -14.75f, -293.35f, 8.66f);
contentStream.curveTo(-316.76f, 30.78f, -328.46f, 61.56f, -328.46f, 93.78f);
contentStream.lineTo(-327.02f, 244.95f);
contentStream.curveTo(-325.57f, 265.47f, -318.2f, 285.98f, -302.17f, 302.18f);
contentStream.lineTo(58.68f, 663.02f);
contentStream.lineTo(360.85f, 360.69f);
contentStream.lineTo(0f, 0f);
contentStream.lineTo(0f, 0f);
contentStream.closePath();
contentStream.moveTo(57.23f, 621.82f);
contentStream.lineTo(-283.09f, 281.5f);
contentStream.curveTo(-293.35f, 271.24f, -299.12f, 258.09f, -299.12f, 243.34f);
contentStream.lineTo(-300.57f, 93.78f);
contentStream.curveTo(-300.57f, 70.38f, -290.31f, 46.81f, -274.12f, 29.34f);
contentStream.curveTo(-256.64f, 11.7f, -233.08f, 1.44f, -208.23f, 1.44f);
contentStream.lineTo(-58.67f, 2.89f);
contentStream.curveTo(-44.08f, 2.89f, -30.77f, 8.66f, -20.51f, 19.08f);
contentStream.lineTo(319.81f, 359.4f);
contentStream.lineTo(57.23f, 621.82f);
contentStream.closePath();
contentStream.fill();
contentStream.restoreGraphicsState();
}

@Override
public void generateRolloverAppearance()
{
Expand Down

0 comments on commit bd5e322

Please sign in to comment.