【问题标题】:How to set the font color for PDAnnotationFreeText with using pdfbox 2.0.16如何使用 pdfbox 2.0.16 为 PDAnnotationFreeText 设置字体颜色
【发布时间】:2019-08-12 10:15:14
【问题描述】:

将XFDF导入FDFAnnotation并转成PDAnnotation后,发现PDAnnotationFreeText的字体颜色不见了。

<freetext page="0" rect="376.81193,778.184946,500.283994,807.936941" flags="print" name="373b558a-4892-5fb4-a9aa-b4d7175d3966" title="wwh" subject="Free text" date="D:20190808175721+08'00'" width="0" creationdate="D:20190808175700+08'00'" TextColor="#00CC63" FontSize="17">
    <contents>English</contents>
    <defaultappearance>0 0 0 rg /Arial 17 Tf</defaultappearance>
    <defaultstyle>font: Arial 17pt; text-align: left; color: #00CC63</defaultstyle>
</freetext>

这是导入 FDFAnnotation 后的详细信息

COSDictionary{
    COSName{Type}:COSName{Annot};
    COSName{Page}:COSInt{0};
    COSName{M}:COSString{D:20190808175721+08'00'};
    COSName{F}:COSInt{4};
    COSName{NM}:COSString{373b558a-4892-5fb4-a9aa-b4d7175d3966};
    COSName{Rect}:COSArray{COSFloat{376.81192};COSFloat{778.18494};COSFloat{500.284};COSFloat{807.93695};};
    COSName{T}:COSString{wwh};
    COSName{CreationDate}:COSString{D:20190808175700+08'00'};
    COSName{Subj}:COSString{Free text};
    COSName{IT}:COSName{};
    COSName{Contents}:COSString{English};
    COSName{Subtype}:COSName{FreeText};
    COSName{Q}:0;
    COSName{DA}:COSString{0 0 0 rg /Arial 17 Tf};
    COSName{DS}:COSString{font: Arial 17pt; text-align: left; color: #00CC63};
}

我已提取颜色十六进制代码并尝试转换为 PDColor

int c = Integer.parseInt("#00CC63".substring(1), 16);
float r = ((c & 0xFF0000) >> 16) / 255f;
float g = ((c & 0x00FF00) >>  8) / 255f;
float b = ((c & 0x0000FF) >>  0) / 255f;
PDColor pdc = new PDColor( new float[] { r, g, b }, PDDeviceRGB.INSTANCE);

但是 PDColor 只是改变背景颜色,不是我的期望。请问怎么设置字体颜色?

这是我的示例文件:https://1.bitsend.jp/download/c10903041b8af47195daeef1f471a366.html

【问题讨论】:

  • PDFreeTextAppearanceHandler 使用 /DA 中最后一个非描边颜色作为文本和边框(因为 Adob​​e 就是这样做的)。但是从您的示例中,我看到如果 /DS 中有不同的颜色,那么该颜色将用于文本颜色。今晚我会在存储库中修复它。
  • 一般来说,PDFBox 对富文本信息(如 DS 条目)的支持有限,通常仅支持基本文本信息(如 DA 条目)被使用。因此,您应该尽可能在基本文本信息中包含正确的信息。
  • 我已经更新了存储库,更改在svn.apache.org/viewvc?rev=1864976&view=rev
  • 刚刚尝试了更改,似乎正则表达式COLOR_PATTERN 无法匹配字符串。将正则表达式修改为".*#([0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]).*"后,现在可以更改字体颜色了。谢谢!!
  • 可能是因为“color:”后面的空格。我没有使用您的文件进行测试(因为基础文件中已经有注释),我使用我使用 Adob​​e Reader 创建的文件进行了测试,然后删除了 /AP。我将在正则表达式中添加一个可选的空格序列。

标签: java pdfbox xfdf


【解决方案1】:

这将在 PDFBox 2.0.17 中修复,也会考虑 /DS 条目 (annotation.getDefaultStyleString()) 的颜色,并将优先于 /DA 条目 (annotation.getDefaultAppearance()) 中的颜色。新的实现可见here,快照可用here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2011-10-14
    • 1970-01-01
    • 2021-12-27
    • 2016-11-17
    • 2016-11-08
    • 2010-11-20
    相关资源
    最近更新 更多