iText 5.5无法填写表格

我们目前正在使用旧的iText 2.1.7版本,但正在评估itextpdf 5.5.0 .
我们在Libreoffice和Quartz(在Mac上)创建了PDF表单 .

填写2.1.7(Stamper / setField等)中的表格时没有任何问题 .
使用5.5.0但是在Quartz中制作的表格工作正常,但Libreoffice制作的表格却没有 .
基本上:使用FormFlattening(false),数据显示在最终文档(以及字段)中,但是使用FormFlattening(true)时,数据(和字段)为空 .

我在LibreOffice和Quartz PDF之间看到的主要区别是所有字体都嵌入在Quartz生成的PDF中 . LibreOffice无法做到这一点 .
这可能是问题吗?如果是这样,为什么2.1.7工作?

提前致谢,
Snorri

回答(1)

2 years ago

基本上:使用FormFlattening(false),数据显示在最终文档(以及字段)中,但使用FormFlattening(true)时,数据(和字段)为空 .

如果 af 是您的 AcroFields 实例,请尝试执行此操作

af.setGenerateAppearances(true);

在关闭压模之前 .

PDF规范ISO 32000-1定义了 NeedAppearances 标志,参见表218 - 交互式表单字典中的条目 . 如果设置为 true ,则PDF查看器知道必须为表单字段创建外观流 .

旧的iText版本完全忽略了该标志,并始终在表单填写期间创建外观流 . 如果标志不是 true (在另一种情况下, Spectator 将重新创建这样的外观),较新的iText版本尊重该标志并且仅在填写表格时创建外观流 .

展平形式时,iText只是将表单元素的外观嵌入到页面内容中 . 因此,如果在填充期间没有为某些字段创建外观流,则该值不会出现在展平文档中 .

使用 setGenerateAppearances(true) 可以强制生成外观流 .