iText 5.5未能填写表格

iText 5.5未能填写表格,itext,Itext,我们目前正在使用旧的iText 2.1.7版本,但正在评估itextpdf 5.5.0 我们在Libreoffice和Quartz(Mac)中创建了PDF表单 填写2.1.7中的表格(压模/设置字段等)时没有任何问题。 然而,在5.5.0中,石英制成的模板工作良好,但在Libreoffice中制成的模板不工作 基本上:使用FormFlatting(false)时,数据显示在最终文档中(以及字段),但使用FormFlatting(true)时,数据(以及字段)为空 我看到LibreOffice和Q

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

填写2.1.7中的表格(压模/设置字段等)时没有任何问题。
然而,在5.5.0中,石英制成的模板工作良好,但在Libreoffice中制成的模板不工作
基本上:使用FormFlatting(false)时,数据显示在最终文档中(以及字段),但使用FormFlatting(true)时,数据(以及字段)为空

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

提前感谢,
斯诺里

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

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

af.setGenerateAppearances(true);
在合上母模之前

PDF规范定义了一个标记,参见表218–交互式表单词典中的条目。如果将其设置为true,则PDF查看器知道它必须为表单字段创建外观流

旧的iText版本完全忽略了该标志,并且总是在表单填充期间创建外观流。较新的iText版本尊重该标志,并且只有在该标志不是true的情况下,才在填写表单时创建外观流(在另一种情况下,查看器将以任何方式重新创建此类外观)

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

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

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

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

af.setGenerateAppearances(true);
在合上母模之前

PDF规范定义了一个标记,参见表218–交互式表单词典中的条目。如果将其设置为true,则PDF查看器知道它必须为表单字段创建外观流

旧的iText版本完全忽略了该标志,并且总是在表单填充期间创建外观流。较新的iText版本尊重该标志,并且只有在该标志不是true的情况下,才在填写表单时创建外观流(在另一种情况下,查看器将以任何方式重新创建此类外观)

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


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

您是在您的机器上还是在生产服务器上进行测试?我对iText了解不多,但有一次我在生产服务器上遇到字体问题,因为iText搜索操作系统上安装的字体。它的JAR中只嵌入了一些字体。感谢您的评论,但mkl的回答起到了作用。您是在您的机器上还是在生产服务器上进行测试?我对iText了解不多,但有一次我在生产服务器上遇到字体问题,因为iText搜索操作系统上安装的字体。在他们的罐子里只嵌入了一些字体。谢谢你的评论,但mkl的回答起了作用。这个解决方案已经过去了一段时间,但是你在许多小时的研究之后帮助了我,太多了:D这个解决方案已经过去了一些时间,但是你在许多小时的研究之后帮助了我,太多了:D