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 15:39:32 UTC
svn commit: r1834620 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java
Author: tilman
Date: Thu Jun 28 15:39:32 2018
New Revision: 1834620
URL: http://svn.apache.org/viewvc?rev=1834620&view=rev
Log:
PDFBOX-3353: support /Comment and /Key
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=1834620&r1=1834619&r2=1834620&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 15:39:32 2018
@@ -60,6 +60,8 @@ public class PDTextAppearanceHandler ext
SUPPORTED_NAMES.add(PDAnnotationText.NAME_CROSS_HAIRS);
SUPPORTED_NAMES.add(PDAnnotationText.NAME_UP_ARROW);
SUPPORTED_NAMES.add(PDAnnotationText.NAME_UP_LEFT_ARROW);
+ SUPPORTED_NAMES.add(PDAnnotationText.NAME_COMMENT);
+ SUPPORTED_NAMES.add(PDAnnotationText.NAME_KEY);
}
public PDTextAppearanceHandler(PDAnnotation annotation)
@@ -81,10 +83,6 @@ public class PDTextAppearanceHandler ext
PDAnnotationText annotation = (PDAnnotationText) getAnnotation();
if (!SUPPORTED_NAMES.contains(annotation.getName()))
{
- //TODO Comment, Key
- // BBox values:
- // Key 13 18
- // Comment 18 18
return;
}
@@ -148,6 +146,12 @@ public class PDTextAppearanceHandler ext
case PDAnnotationText.NAME_UP_LEFT_ARROW:
drawUpLeftArrow(annotation, contentStream);
break;
+ case PDAnnotationText.NAME_COMMENT:
+ drawComment(annotation, contentStream);
+ break;
+ case PDAnnotationText.NAME_KEY:
+ drawKey(annotation, contentStream);
+ break;
default:
break;
}
@@ -583,6 +587,92 @@ public class PDTextAppearanceHandler ext
contentStream.fillAndStroke();
}
+ private void drawComment(PDAnnotationText annotation, final PDAppearanceContentStream contentStream)
+ throws IOException
+ {
+ adjustRectAndBBox(annotation, 18, 18);
+
+ contentStream.setMiterLimit(4);
+ contentStream.setLineJoinStyle(1);
+ contentStream.setLineCapStyle(0);
+ contentStream.setLineWidth(0.59f); // value from Adobe
+
+ contentStream.addRect(0.3f, 0.3f, 18-0.6f, 18-0.6f);
+ contentStream.stroke();
+
+ 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
+ contentStream.moveTo(2549, 5269);
+ contentStream.curveTo(1307, 5269, 300, 4451, 300, 3441);
+ contentStream.curveTo(300, 3023, 474, 2640, 764, 2331);
+ contentStream.curveTo(633, 1985, 361, 1691, 357, 1688);
+ contentStream.curveTo(299, 1626, 283, 1537, 316, 1459);
+ contentStream.curveTo(350, 1382, 426, 1332, 510, 1332);
+ contentStream.curveTo(1051, 1332, 1477, 1558, 1733, 1739);
+ contentStream.curveTo(1987, 1659, 2261, 1613, 2549, 1613);
+ 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();
+ }
+
+ private void drawKey(PDAnnotationText annotation, final PDAppearanceContentStream contentStream)
+ throws IOException
+ {
+ adjustRectAndBBox(annotation, 13, 18);
+
+ contentStream.setMiterLimit(4);
+ contentStream.setLineJoinStyle(1);
+ contentStream.setLineCapStyle(0);
+ contentStream.setLineWidth(200);
+
+ contentStream.transform(Matrix.getScaleInstance(0.003f, 0.003f));
+ contentStream.transform(Matrix.getRotateInstance(Math.toRadians(45), 2500, -800));
+
+ // shape from Font Awesome by "printing" key.svg into a PDF
+ contentStream.moveTo(4799, 4004);
+ contentStream.curveTo(4799, 3149, 4107, 2457, 3253, 2457);
+ contentStream.curveTo(3154, 2457, 3058, 2466, 2964, 2484);
+ contentStream.lineTo(2753, 2246);
+ contentStream.curveTo(2713, 2201, 2656, 2175, 2595, 2175);
+ contentStream.lineTo(2268, 2175);
+ contentStream.lineTo(2268, 1824);
+ contentStream.curveTo(2268, 1707, 2174, 1613, 2057, 1613);
+ contentStream.lineTo(1706, 1613);
+ contentStream.lineTo(1706, 1261);
+ contentStream.curveTo(1706, 1145, 1611, 1050, 1495, 1050);
+ contentStream.lineTo(510, 1050);
+ contentStream.curveTo(394, 1050, 300, 1145, 300, 1261);
+ contentStream.lineTo(300, 1947);
+ contentStream.curveTo(300, 2003, 322, 2057, 361, 2097);
+ contentStream.lineTo(1783, 3519);
+ contentStream.curveTo(1733, 3671, 1706, 3834, 1706, 4004);
+ contentStream.curveTo(1706, 4858, 2398, 5550, 3253, 5550);
+ contentStream.curveTo(4109, 5550, 4799, 4860, 4799, 4004);
+ contentStream.closePath();
+ contentStream.moveTo(3253, 4425);
+ contentStream.curveTo(3253, 4192, 3441, 4004, 3674, 4004);
+ contentStream.curveTo(3907, 4004, 4096, 4192, 4096, 4425);
+ contentStream.curveTo(4096, 4658, 3907, 4847, 3674, 4847);
+ contentStream.curveTo(3441, 4847, 3253, 4658, 3253, 4425);
+ contentStream.fillAndStroke();
+ }
+
private void addPath(final PDAppearanceContentStream contentStream, GeneralPath path) throws IOException
{
double curX = 0;