PDFBox RichText格式化字段

时间:2017-11-08 13:20:55

标签: java pdfbox rtf

我目前正在尝试打开,编辑和播放使用PDFBox保存PDF文件。 使用纯文本字段它已经可以工作,但是我很难将RichTextFormat-Text设置为值,因为每次我使用“setRichTextValue”,保存并打开文档时,该字段为空(未更改)。

代码如下(从多个函数中删除):

PDDocument pdfDoc = PDDocument.load(new File("my pdf path"));
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("field-to-change");
if (field instanceof PDTextField) {
    PDTextField tfield = (PDTextField) field;
    COSDictionary dict = field.getCOSObject();
    //COSString defaultAppearance = (COSString) dict.getDictionaryObject(COSName.DA);
    //if (defaultAppearance != null && font != "" && size > 0)
    //  dict.setString(COSName.DA, "/" + font + " " + size + " Tf 0 g");
    boolean rtf = true;
    String val = "{\rtf1\ansi\deff0 {\colortbl;\red0\green0\blue0;\red255\green0\blue0;} \cf2 Red RTF Text \cf1 }";
    tfield.setRichText(rtf);
    if (rtf)
        tfield.setRichTextValue(val);
    else
        tfield.setValue(val);
}
// save document etc.

通过挖掘PDFBox文档我找到了.setRichTextValue(String r)

 * Set the fields rich text value.
 * Setting the rich text value will not generate the appearance
 * for the field.
 * You can set {@link PDAcroForm#setNeedAppearances(Boolean)} to
 * signal a conforming reader to generate the appearance stream.
 * Providing null as the value will remove the default style string.
 * @param richTextValue a rich text string

所以我添加了

pdfDoc.getDocumentCatalog().getAcroForm().setNeedAppearances(true);

..直接在PDDocument对象之后,它没有改变任何东西。所以我进一步搜索并找到了AppearanceGenerator类,应该自动创建样式?但它似乎没有,你不能手动调用它。

我在这里不知所措,谷歌也没有帮助。似乎没有人曾经使用过这个或者我太愚蠢了。我希望解决方案可以在PDFBox中完成,因为你不需要支付许可证,它已经适用于我正在做的其他事情(获取和替换图像,删除文本字段),所以它一定是可能的吗?

提前致谢。

0 个答案:

没有答案