2014-06-12 38 views
0

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

填写2.1.7中的表格(Stamper/setField等)没有任何问题。
随着5.5.0,但石英制作的表格工作正常,但在Libreoffice制作的表格没有。
基本上:通过FormFlattening(false)数据出现在最终文档(以及字段)中,但FormFlattening(true)数据(和字段)是空的。

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

由于提前,
SnorriiText 5.5无法填写表格

+0

你是在你的机器上还是在生产服务器上测试它?我对iText知之甚少,但是一旦我在生产服务器上遇到字体问题,因为iText会搜索操作系统上安装的字体。它的罐子里只嵌入了一些字体。 – rcarraretto

+0

谢谢你的评论,但mkl的答案做到了。 – user3733812

回答

4

基本上:随着FormFlattening(假)的数据出现在文件的最后(以及字段),但与FormFlattening(真)的数据(和字段)是空的。

如果af是你AcroFields情况,请尝试关闭压模之前做

af.setGenerateAppearances(true); 

PDF规范ISO 32000-1定义了一个NeedAppearances标志,参见表格218 - 交互式表单词典中的条目。如果它设置为true,PDF阅读器知道它必须为表单域创建外观流。

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

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

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

+0

非常感谢mkl。这个窍门! – user3733812

+0

这个解决方案已经过去了一段时间,但是经过许多小时的研究,你帮了我很大的忙。 – tom3008