我可以用下面的代码填充文本框注解,但是文本不会出现在某些阅读器中,比如adobeacrobat,尽管它确实出现在chrome和其他基于webkit的浏览器中。我尝试填充的PDF不使用acroforms或fdf。我使用的是apachepdfbox,但我不认为pdf库有多大区别,即使是跨语言/平台的。
// edited for brevity
PDAnnotation annotation = doc.getPages().get(0).getAnnotations().get(0);
COSDictionary cosObject = annotation.getCOSObject();
cosObject.setString(COSName.V, content);
irs表格w-4就是一个例子。
我已经试过了
我试着将我的pdf输出与chrome中填充的文档进行比较,但我看到的唯一区别是default appearance(da)属性。我尝试过这样设置默认外观文本内容,但没有效果:
COSString defaultAppearance = (COSString)cosObject.getItem(COSName.DA);
COSString newAppearance = new COSString(defaultAppearance.getString() + "0 0 Td (" + value + ") Tj");
cosObject.setItem(COSName.DA, newAppearance);
我还弄了一些听起来很有前途的旗子:
int FLAG_PRINT = 4;
int FLAG_READ_ONLY = 64;
annotation.setAnnotationFlags(annotation.getAnnotationFlags() | FLAG_PRINT | FLAG_READ_ONLY);
我也尝试过其他属性:
cosObject.setString(COSName.CONTENTS, content);
我相信pdf 1.7规范中的相关部分是12.7.4.3。
我错过了什么?
1条答案
按热度按时间zsohkypk1#
您的pdf使用acroform字段。小部件注解是字段的可视表示。你要做的是设置字段。下面是源代码下载中的setfield.java示例。用以下参数调用它:文件名、字段名(名字是“topmostsubform[0].page1[0].step1a[0].f1\u 01[0]”)和一个值。
要获取字段名,请下载pdfdebugger并将鼠标悬停在要设置的字段上。
下面是设置后字段的外观: