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);
}