我目前正在尝试打开,编辑和播放使用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中完成,因为你不需要支付许可证,它已经适用于我正在做的其他事情(获取和替换图像,删除文本字段),所以它一定是可能的吗?
提前致谢。