You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/06/28 17:30:55 UTC

svn commit: r1834631 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java

Author: tilman
Date: Thu Jun 28 17:30:55 2018
New Revision: 1834631

URL: http://svn.apache.org/viewvc?rev=1834631&view=rev
Log:
PDFBOX-3353: correct drawing of /Comment, use outer shape only, prepaint area with CA ca 0.6, draw rectangle in reverse order to get donut effect, make width thicker

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java?rev=1834631&r1=1834630&r2=1834631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java Thu Jun 28 17:30:55 2018
@@ -595,16 +595,26 @@ public class PDTextAppearanceHandler ext
         contentStream.setMiterLimit(4);
         contentStream.setLineJoinStyle(1);
         contentStream.setLineCapStyle(0);
-        contentStream.setLineWidth(0.59f); // value from Adobe
+        contentStream.setLineWidth(200);
 
+        // Adobe first fills a white rectangle with CA ca 0.6, so do we
+        contentStream.saveGraphicsState();
+        contentStream.setLineWidth(1);
+        PDExtendedGraphicsState gs = new PDExtendedGraphicsState();
+        gs.setAlphaSourceFlag(false);
+        gs.setStrokingAlphaConstant(0.6f);
+        gs.setNonStrokingAlphaConstant(0.6f);
+        gs.setBlendMode(BlendMode.NORMAL);
+        contentStream.setGraphicsStateParameters(gs);
+        contentStream.setNonStrokingColor(1f);
         contentStream.addRect(0.3f, 0.3f, 18-0.6f, 18-0.6f);
-        contentStream.stroke();
+        contentStream.fill();
+        contentStream.restoreGraphicsState();
 
-        contentStream.setNonStrokingColor(0);
         contentStream.transform(Matrix.getScaleInstance(0.003f, 0.003f));
         contentStream.transform(Matrix.getTranslateInstance(500, -300));
         
-        // shape from Font Awesome by "printing" comment.svg into a PDF
+        // outer shape from Font Awesome by "printing" comment.svg into a PDF
         contentStream.moveTo(2549, 5269);
         contentStream.curveTo(1307, 5269, 300, 4451, 300, 3441);
         contentStream.curveTo(300, 3023, 474, 2640, 764, 2331);
@@ -616,19 +626,14 @@ public class PDTextAppearanceHandler ext
         contentStream.curveTo(3792, 1613, 4799, 2431, 4799, 3441);
         contentStream.curveTo(4799, 4451, 3792, 5269, 2549, 5269);
         contentStream.closePath();
-        contentStream.moveTo(2549, 2035);
-        contentStream.curveTo(2315, 2035, 2083, 2071, 1860, 2141);
-        contentStream.lineTo(1661, 2204);
-        contentStream.lineTo(1490, 2083);
-        contentStream.curveTo(1364, 1994, 1192, 1895, 984, 1828);
-        contentStream.curveTo(1048, 1935, 1111, 2054, 1159, 2182);
-        contentStream.lineTo(1252, 2429);
-        contentStream.lineTo(1071, 2620);
-        contentStream.curveTo(912, 2790, 721, 3070, 721, 3441);
-        contentStream.curveTo(721, 4216, 1541, 4847, 2549, 4847);
-        contentStream.curveTo(3558, 4847, 4378, 4216, 4378, 3441);
-        contentStream.curveTo(4378, 2666, 3558, 2035, 2549, 2035);
-        contentStream.fill();
+
+        // can't use addRect: if we did that, we wouldn't get the donut effect
+        contentStream.moveTo(0.3f / 0.003f - 500, 0.3f / 0.003f + 300);
+        contentStream.lineTo(0.3f / 0.003f - 500, 0.3f / 0.003f + 300 + 17.4f / 0.003f);
+        contentStream.lineTo(0.3f / 0.003f - 500 + 17.4f / 0.003f, 0.3f / 0.003f + 300 + 17.4f / 0.003f);
+        contentStream.lineTo(0.3f / 0.003f - 500 + 17.4f / 0.003f, 0.3f / 0.003f + 300);
+
+        contentStream.closeAndFillAndStroke();
     }
     
     private void drawKey(PDAnnotationText annotation, final PDAppearanceContentStream contentStream)