当前位置: 首页 > 知识库问答 >
问题:

iText 7:设置文本字段一次,即使它以相同的名称存在多次

陶琦
2023-03-14

我有一个PDF文档,其中包含多个同名文本字段。

我想设置一次值(field.setValue("text"))和每次出现该字段的值。这些字段可能在同一页或不同页(显然是同一文档)中。

当只有一个这样的字段时,可以生成PDF。如果有多个字段,则所有字段均显示为空。如果我禁用展平,我可以在每个字段中看到文本(尽管只有在单击字段后-奇怪…)。

这里是测试PDF。

编辑:

这个问题似乎只有在我设置字段的字体时才会发生。您可以使用此字体和以下代码进行复制:

PdfFont font = PdfFontFactory.createFont("src/main/resources/fonts/Arimo-Regular.ttf", PdfEncodings.IDENTITY_H);
PdfFormField textField = acroForm.getField("test");
textField.setValue("שלום", font, 11.0f);

共有1个答案

乜心思
2023-03-14

使用OP提供的字体和带有附加字体和字体大小参数setValue重载,我可以重现该问题。

该问题与您使用的特定字体或文本无关,它与您使用的设置值过载有关:

  • PdfFormField.set值(String)(除非字段是按钮字段)遍历当前字段的整个子代层次结构,并为每个子代调用另一个setValue重载,最终也重载当前字段。Li>
  • 另一方面PdfFormField.set值(String,boolean)PdfFormField.set值(String,PdfFont,浮动)假设当前字段实际上是添加外观的单个小部件到。

因此,任何具有多个小部件的表单字段(甚至是具有单个小部件的字段,该字段只是没有与该字段合并)都不会为其小部件检索适当的外观,如果仅调用后者类型的setValue重载。

考虑到以上所述,一种解决方法是以某种方式使用单个参数setValue重载。可以通过将字体和字体大小显式设置为表单字段来实现,只需替换

textField.setValue("שלום", font, 11.0f);

textField.setFont(font);
textField.setFontSize(11f);
textField.setValue("שלום");

(SetExtField testTestSetFontAndTextToField具有许多可视化功能

现在这些领域确实被填满了,它们的内容出现在扁平的结果中。

不幸的是,这里出现了另一个问题:字母出现的顺序错误。仅使用基本的iText组件似乎不支持RTL语言。可能使用pdfCalligraph附加模块会增加对希伯来语等的支持,但我不知道。

我无法用你的示例文件再现这个问题。

我像这样改变字段值

PdfReader reader = new PdfReader(resource);
PdfDocument pdfDocument = new PdfDocument(reader, new PdfWriter(outputStream));
PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, false);

PdfFormField testField = acroForm.getField("test");
testField.setValue("My test text...");

acroForm.flattenFields();

pdfDocument.close();

(SetTextField testtestsettexttofield,带有许多可视化功能

但结果是预期的:

该字段的所有三个实例都已填写。这既适用于展平,也适用于无展平,同时适用于7.1.4和当前的7.1.5-SNAPSHOT。

但是,从结果PDF的内部来看,有一个问题

值V在抽象字段和每个小部件中都设置。它应该只在野外。

 类似资料:
  • 我有一个Spring输入通道,定义如下 文件名示例为test.sqq。SQQ是客户端用于将文件放在FTP中的文件格式。但是,我看到spring ftp适配器一次又一次地使用不同的文件名获取相同的文件。所以第一次是test.sqq。然后下一次是test.sqq-20170204.pqq,然后下一次是test.sqq-20170204.pqq.20170304.pqq。这种情况还在继续。我在我的一端有

  • 问题内容: 我今天在另一个问题中提出了这个问题,但是 由于措辞的方式,恐怕无法解决任何问题。 我有一个json输入,其中包含以下数据: 杰森 如您所见,option_value项是一个对象中的Array和 另一个对象中的简单字符串。 我怎样才能让Gson正确处理呢?我的类将此描述为 List对象,因此它适用于option_value是 数组的前几个项目,但是当它成为字符串时,应用程序崩溃,并且我收

  • 在Spring IOC中,bean的两个定义(具有相同的名称和类)是否有效? 我有两个bean定义文件包含在web中。xml。参见下面的示例。 应用Context-beans1.xml applicationContext-beans2。xml 到目前为止,我还没有遇到任何问题。但是,这可能会影响到多线程和集群的现实环境吗? 注意:这两个XMLs都被加载,因为我可以使用在这两个XMLs中定义的其他

  • 我使用的是,我需要展平包含同名字段的文档。 我创建的文档如下所示: 在那之后,我试图像下面这样压平文档: 我的主要方法是: 展平后,我得到的文档包含一个展平字段,但我必须得到两个展平字段。 如何解决此问题?

  • 本文向大家介绍在MongoDB的另一列中设置相似的名称?,包括了在MongoDB的另一列中设置相似的名称?的使用技巧和注意事项,需要的朋友参考一下 只需循环并从另一列设置列值。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是从MongoDB的另一列中设置相似名称的查询- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 以同样的方式创建2个PdfSignatureFormFields,我在Adobe Reader中以不同的方式显示了2个字段:一个带有指示签名字段的小图片,另一个没有指示。 我使用细胞setNextRenader调用来创建这些字段,如下一个摘录所示: