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 2019/08/12 15:52:08 UTC
svn commit: r1864974 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java
Author: tilman
Date: Mon Aug 12 15:52:08 2019
New Revision: 1864974
URL: http://svn.apache.org/viewvc?rev=1864974&view=rev
Log:
PDFBOX-3353: if there is a color in /DS, then use that one for the text
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java?rev=1864974&r1=1864973&r2=1864974&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java Mon Aug 12 15:52:08 2019
@@ -16,6 +16,8 @@
package org.apache.pdfbox.pdmodel.interactive.annotation.handlers;
import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.fontbox.util.Charsets;
@@ -49,6 +51,8 @@ public class PDFreeTextAppearanceHandler
{
private static final Log LOG = LogFactory.getLog(PDFreeTextAppearanceHandler.class);
+ final Pattern COLOR_PATTERN = Pattern.compile(".*color\\:\\#([0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]).*");
+
public PDFreeTextAppearanceHandler(PDAnnotation annotation)
{
super(annotation);
@@ -88,8 +92,23 @@ public class PDFreeTextAppearanceHandler
setOpacity(cs, annotation.getConstantOpacity());
// Adobe uses the last non stroking color from /DA as stroking color!
+ // But if there is a color in /DS, then that one is used for text.
PDColor strokingColor = extractNonStrokingColor(annotation);
boolean hasStroke = cs.setStrokingColorOnDemand(strokingColor);
+ PDColor textColor = strokingColor;
+ String defaultStyleString = annotation.getDefaultStyleString();
+ if (defaultStyleString != null)
+ {
+ Matcher m = COLOR_PATTERN.matcher(defaultStyleString);
+ if (m.find())
+ {
+ int color = Integer.parseInt(m.group(1), 16);
+ float r = ((color >> 16) & 0xFF) / 255f;
+ float g = ((color >> 8) & 0xFF) / 255f;
+ float b = (color & 0xFF) / 255f;
+ textColor = new PDColor( new float[] { r, g, b }, PDDeviceRGB.INSTANCE);
+ }
+ }
if (ab.dashArray != null)
{
@@ -248,7 +267,7 @@ public class PDFreeTextAppearanceHandler
cs.beginText();
cs.setFont(font, fontSize);
- cs.setNonStrokingColor(strokingColor.getComponents());
+ cs.setNonStrokingColor(textColor.getComponents());
AppearanceStyle appearanceStyle = new AppearanceStyle();
appearanceStyle.setFont(font);
appearanceStyle.setFontSize(fontSize);