2

我有一个 PDF 模板(使用 Adob​​e Livecycle 设计器设计),它有一个子表单和一个文本字段。这两个对象的属性设置为float。并且这些对象的高度设置为Autofit。这些对象的所有封闭父级高度都设置为AutoFit

我的目的是根据我们在文本字段中输入的文本内容来增加文本字段的高度。

当我从 Adob​​e 设计器预览模板时,生成的预览 PDF 将文本字段显示为浮动(基于我输入的测试数据)。

出于我们的应用目的,我们使用 iText。

基本上,我们加载这些预定义模板,并使用 iText API 将数据填充到这些字段中。

我们当前使用的 iText 版本是 iText 5.1.3

...

Document document = new Document();
document.open();
PdfReader reader = new PdfReader(<inputTemplate>);
ByteArrayOutputStream aStream2 = new ByteArrayOutputStream();
PdfStamper stamper2 = new PdfStamper(reader, aStream2);
AcroFields form = stamper2.getAcroFields();
form.setField("<fieldname>", "<fieldvalue>");

... 

等等。

这样生成的 PDF 只显示适合文本框大小的文本,基本上忽略溢出。

希望我已经对我遇到的问题给出了足够的描述。我想动态嵌入内容并使 PDF 的其余部分可浮动。我想知道我还能如何使用 iText 实现这一目标?

4

1 回答 1

1

你在混合不同的东西。

PDF 中有两种类型的表单技术: - AcroForm 技术:使用 PDF 语法描述表单,如 PDF 字典使用键/值对描述字段,如 PDF 数组存储字段坐标,以及很快。如果您使用 AcroForm 技术,则无法满足您的要求。你使用了错误的技术。通常,这些表单是使用 Adob​​e Acrobat、LibreOffice... - XML 表单架构 (XFA) 创建的:使用 XML 描述表单。PDF 充当 XML 的容器。通常,这些表单是使用 Adob​​e LiveCycle Designer 创建的。

有时,表单同时使用两种技术(混合表单),在这种情况下,表单是使用 PDF 语法和 XML 语法定义的。

实现您想要的唯一方法是使用纯粹的 dynamix XFA 表单。在这种情况下,您不能使用 setField() 方法。相反,您要么必须使用 fillXfaForm(),就像在此示例中所做的那样:http://itextpdf.com/examples/iia.php?id=165或者 您必须使用 XFA Worker,您可以在此处找到演示:http://demo.itextsupport.com/xfademo/

于 2012-09-06T08:17:30.813 回答