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/04/23 17:13:42 UTC
svn commit: r1829909 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java
Author: tilman
Date: Mon Apr 23 17:13:42 2018
New Revision: 1829909
URL: http://svn.apache.org/viewvc?rev=1829909&view=rev
Log:
PDFBOX-3353: add caret annotation handler
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java?rev=1829909&r1=1829908&r2=1829909&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java Mon Apr 23 17:13:42 2018
@@ -15,10 +15,19 @@
*/
package org.apache.pdfbox.pdmodel.interactive.annotation.handlers;
+import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationCaret;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceContentStream;
+/**
+ * Handler to generate the caret annotations appearance.
+ *
+ * @author Tilman Hausherr
+ */
public class PDCaretAppearanceHandler extends PDAbstractAppearanceHandler
{
private static final Log LOG = LogFactory.getLog(PDCaretAppearanceHandler.class);
@@ -39,7 +48,46 @@ public class PDCaretAppearanceHandler ex
@Override
public void generateNormalAppearance()
{
- // TODO to be implemented
+ float lineWidth = 1f;
+ //TODO Adobe creates the /RD entry, but it is unclear how it
+ // gets the (identical) numbers. The numbers from there are then substracted/added from /BBox
+ // and used in the translation in the matrix and also for the line width.
+
+ try
+ {
+ PDAnnotationCaret annotation = (PDAnnotationCaret) getAnnotation();
+ try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream())
+ {
+ contentStream.setStrokingColor(getColor());
+ contentStream.setLineWidth(lineWidth);
+ contentStream.setNonStrokingColor(getColor());
+
+ handleOpacity(annotation.getConstantOpacity());
+
+ PDRectangle rect = getRectangle();
+ PDRectangle bbox = new PDRectangle(rect.getWidth(), rect.getHeight());
+ annotation.getNormalAppearanceStream().setBBox(bbox);
+
+ float halfX = rect.getWidth() / 2;
+ float halfY = rect.getHeight() / 2;
+ contentStream.moveTo(0, 0);
+ contentStream.curveTo(halfX, 0,
+ halfX, halfY,
+ halfX, rect.getHeight());
+ contentStream.curveTo(halfX, halfY,
+ halfX, 0,
+ rect.getWidth(), 0);
+ // closeAndFillAndStroke() would bring a thicker "thin top" shape.
+ contentStream.closePath();
+ contentStream.fill();
+ contentStream.stroke();
+ //TODO test whether the stroke() and setLineWidth() calls have any effect at all.
+ }
+ }
+ catch (IOException e)
+ {
+ LOG.error(e);
+ }
}
@Override
@@ -53,4 +101,4 @@ public class PDCaretAppearanceHandler ex
{
// TODO to be implemented
}
-}
+}
\ No newline at end of file