我有一个要求,我必须使用Itext在PDF表单中填充值。
表单i具有多个具有相同字段名的字段。概念是在PDF表单字段名称通用的情况下填充相同的值。
因此,如果有两个或更多名为txtSysTime的字段,那么代码应该在所有字段中填充系统时间。
我的问题基本上是
我正在使用以下代码进行相同的尝试:
PdfReader pdfTemplate = new PdfReader(inputFilePath);
FileOutputStream fileOutputStream = new FileOutputStream(outputFilePath);
ByteArrayOutputStream out = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(pdfTemplate, fileOutputStream);
stamper.setFormFlattening(true);
stamper.getAcroFields().setField("TextBox", "value filled");
使用此代码,第一个同名字段中的值将被正确填充,但其余部分留空。
请帮忙
实际上,只要字段位于单独的页面上,就可以在一个纯pdf表单中包含多个同名字段。我目前正在寻找解决这个问题的方法。。。
itext正在使用widget注释,用于具有相同名称的多个字段。对于重复字段,名称将是一个,但坐标将是多个。
下面的代码将帮助您。。
InputStream pdfFileStream = new FileInputStream(file);
PdfReader reader = new PdfReader(pdfFileStream);
PdfStamper stamper = null;
try {
stamper = new PdfStamper(reader, tempOS, '\0');
} catch (DocumentException e1) {
e1.printStackTrace();
}
AcroFields form = stamper.getAcroFields();
Object[] keys = form.getFields().keySet().toArray();
for (Entry<String, AcroFields.Item> entry : fields.entrySet()) {
String docFieldName = entry.getKey();
List<FieldPosition> fieldPosition = form.getFieldPositions(docFieldName); // for multiple filed with same name size and co ordinate will more then 1..
for(int i=0;i<fieldPosition.size();i++) {
Rectangle position = fieldPosition.get(i).position;
float left = position.getLeft();
float top = position.getTop();
float width = position.getWidth();
float height = position.getHeight();
int currentPage = fieldPosition.get(i).page;
........................here you can set value to list..
}
}
您可能想做的是使用pdf表单字段的“自动填充”功能?因此,您填写一个字段,所有其他字段都会自动使用相同的内容填写该字段名。这是完全可能的。(您可能在adobe reader/acrobat中尝试过)
但是你必须区分(技术上):这些表单域有一个“数据”表示和几个小部件(几个视觉表示)。因此,你只需要用一个特定的值填充那个字段(它的小部件有几个坐标):
boolean successful = stamper.getAcroFields().setField("TextBox", "some value");
如果随后在PDF查看器软件(如adobe reader)中打开该PDF,则所有字段都具有相同的内容。出于好奇,为什么要使用setFormFlatting(true)
展平字段?然后,所有字段都将被删除并展平。
我使用Adobe acrobat reader编辑PDF,在我看到的地方,每个字段都有一个position属性,表示PDF字段在表单中的位置。 所以我的问题是,我能读到那个值吗? 现在我用下面的代码检索表单字段:
问题内容: 如果您有一个包含带有重复属性的文本输入的表单,并且该表单已经过帐,那么您仍然能够从PHP数组中获取所有字段的值吗? 问题答案: 否。仅最后一个输入元素可用。 如果要使用相同名称的多个输入,请使用输入名称属性。然后将包含foo的数组,其中包含来自输入元素的所有值。 如果不使用则仅包含最后一个值的原因是因为PHP基本上只会爆炸并遍历要填充的原始查询字符串。当遇到已经存在的名称/值对时,
我有一个PDF文件,其中包含一个表单,其中的字段具有相同的字段名。这是为了共享文档中的数据而做的。例如,我有合同,此文档的每一页都必须有公司名称,我将公司名称写在一个表单字段中,并将其复制到当前文档的所有页面,但是当我尝试使用库阅读此文档时,我没有得到此数据,因为只创建一个字段名为的字段,而另一个字段名为clean。 如何使用库读取具有相同字段名称的字段?
如何生成多个页面的pdf报告,每个页面上的内容相同。以下是单页报告的代码。多个页面应位于单个pdf文件中。
我使用的是,我需要展平包含同名字段的文档。 我创建的文档如下所示: 在那之后,我试图像下面这样压平文档: 我的主要方法是: 展平后,我得到的文档包含一个展平字段,但我必须得到两个展平字段。 如何解决此问题?
我有从2个表中检索2个对象(由JooQ生成的POJO)的一条记录的代码。 表ISSUE和表CLIENT都有PK字段“ID”。 问题是当映射到(POJO.class)时,具有相同名称的表字段没有正确映射到POJO。在上面的示例中,jIssue获取jClient的id。 当使用TableRecords而不是POJO的所有映射都正确完成时,但您不能在生成的DAO中使用TableRecords,它需要生成