Author: tilman
Date: Fri Feb  7 10:30:15 2025
New Revision: 1923636

URL: http://svn.apache.org/viewvc?rev=1923636&view=rev
Log:
PDFBOX-5947: support Graph and Tag, Pushpin is the default

Modified:
    
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java?rev=1923636&r1=1923635&r2=1923636&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFileAttachmentAppearanceHandler.java
 Fri Feb  7 10:30:15 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()
     {


Reply via email to