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/01/22 16:23:59 UTC

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

Author: tilman
Date: Mon Jan 22 16:23:59 2018
New Revision: 1821888

URL: http://svn.apache.org/viewvc?rev=1821888&view=rev
Log:
PDFBOX-3353: missing /Border and /BS means black; support underline

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

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java?rev=1821888&r1=1821887&r2=1821888&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java Mon Jan 22 16:23:59 2018
@@ -25,6 +25,8 @@ import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceContentStream;
@@ -68,7 +70,13 @@ public class PDLinkAppearanceHandler ext
         {
             try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream())
             {
-                boolean hasStroke = contentStream.setStrokingColorOnDemand(getColor());
+                PDColor color = annotation.getColor();
+                if (color == null)
+                {
+                    // spec is unclear, but black is what Adobe does
+                    color = new PDColor(new float[] { 0 }, PDDeviceGray.INSTANCE);
+                }
+                boolean hasStroke = contentStream.setStrokingColorOnDemand(color);
 
                 contentStream.setBorderLine(lineWidth, annotation.getBorderStyle());
                 
@@ -79,8 +87,17 @@ public class PDLinkAppearanceHandler ext
                 // Acrobat applies a padding to each side of the bbox so the line is completely within
                 // the bbox.
                 PDRectangle borderEdge = getPaddedRectangle(getRectangle(),lineWidth/2);
-                contentStream.addRect(borderEdge.getLowerLeftX() , borderEdge.getLowerLeftY(),
-                        borderEdge.getWidth(), borderEdge.getHeight());
+                if (annotation.getBorderStyle() != null &&
+                    annotation.getBorderStyle().getStyle().equals(PDBorderStyleDictionary.STYLE_UNDERLINE))
+                {
+                    contentStream.moveTo(borderEdge.getLowerLeftX(), borderEdge.getLowerLeftY());
+                    contentStream.lineTo(borderEdge.getLowerLeftX() + borderEdge.getWidth(), borderEdge.getLowerLeftY());
+                }
+                else
+                {
+                    contentStream.addRect(borderEdge.getLowerLeftX(), borderEdge.getLowerLeftY(),
+                                          borderEdge.getWidth(), borderEdge.getHeight());
+                }
                 
                 contentStream.drawShape(lineWidth, hasStroke, false);
             }