iText 5.5无法填写表格

时间:2014-06-12 11:37:59

标签: itext

我们目前正在使用旧的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 个答案:

答案 0 :(得分:5)

  

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

如果afAcroFields个实例,请尝试

af.setGenerateAppearances(true);

关闭压模之前。

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

旧的iText版本完全忽略了该标志,并始终在表单填写期间创建外观流。如果标志不是 true ,那么较新的iText版本会尊重该标记并仅在填写表单时创建外观流(在另一种情况下,查看器将重新创建此类外观)。

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

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