Author: tilman
Date: Fri Feb 7 10:30:19 2025
New Revision: 1923637
URL: http://svn.apache.org/viewvc?rev=1923637&view=rev
Log:
PDFBOX-5947: support Graph and Tag, Pushpin is the default
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java?rev=1923637&r1=1923636&r2=1923637&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
Fri Feb 7 10:30:19 2025
@@ -65,18 +65,22 @@ public class PDFileAttachmentAppearanceH
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)
@@ -178,6 +182,146 @@ public class PDFileAttachmentAppearanceH
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()
{