如何使用具有相同名称的表单域?
How to work with form fields which have the same names?
我的 PDF 文件包含一个表单,其中的字段名称相同。已经完成了在文档中共享数据。例如,我有合同,该文档的每一页都必须有公司名称,我在一个表单字段中写下公司名称,并将其复制到当前文档的所有页面,但是当我尝试使用 [=11 阅读该文档时=] library 我没有得到这个数据,因为 itext7
只用字段名创建了一个字段,其他的正在清理。
PdfFormField field = acroform.getFormFields().values().get(0);
if(field.getFieldName().equals(“my_company”)) {
List<PdfWidgetAnnotation> list = field.getWidgets();
if(pdf.getPageNumber(list.get(0).getPage()) == 1). { // because I have this text on page 1, but this code return page = 7, because is the last page of the document which contains this text field.
…
}
}
如何使用 itext7
库读取具有相同字段名称的字段?
我找到了解决问题的方法。我从 Catalog
中获取了所有位于 PdfDocument
class 中的字段。代码如下所示:
public List<PdfFormField> getFields() {
final List<PdfFormField> pdfFormFields = new ArrayList<>();
final PdfDictionary acroFormDict = pdf.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
if (acroFormDict != null) {
final PdfArray fields = acroFormDict.getAsArray(PdfName.Fields);
if(fields != null) {
fillPdfFormFields(fields, pdfFormFields);
}
}
return pdfFormFields;
}
private List<PdfFormField> fillPdfFormFields(PdfArray array, List<PdfFormField> fields) {
array.forEach(pdfObject -> {
final PdfFormField field = PdfFormField.makeFormField(pdfObject, pdfFile);
fields.add(field);
final PdfArray fieldKids = field.getKids();
if (fieldKids != null) {
fillPdfFormFields(fieldKids, fields);
}
});
return fields;
}
我的 PDF 文件包含一个表单,其中的字段名称相同。已经完成了在文档中共享数据。例如,我有合同,该文档的每一页都必须有公司名称,我在一个表单字段中写下公司名称,并将其复制到当前文档的所有页面,但是当我尝试使用 [=11 阅读该文档时=] library 我没有得到这个数据,因为 itext7
只用字段名创建了一个字段,其他的正在清理。
PdfFormField field = acroform.getFormFields().values().get(0);
if(field.getFieldName().equals(“my_company”)) {
List<PdfWidgetAnnotation> list = field.getWidgets();
if(pdf.getPageNumber(list.get(0).getPage()) == 1). { // because I have this text on page 1, but this code return page = 7, because is the last page of the document which contains this text field.
…
}
}
如何使用 itext7
库读取具有相同字段名称的字段?
我找到了解决问题的方法。我从 Catalog
中获取了所有位于 PdfDocument
class 中的字段。代码如下所示:
public List<PdfFormField> getFields() {
final List<PdfFormField> pdfFormFields = new ArrayList<>();
final PdfDictionary acroFormDict = pdf.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
if (acroFormDict != null) {
final PdfArray fields = acroFormDict.getAsArray(PdfName.Fields);
if(fields != null) {
fillPdfFormFields(fields, pdfFormFields);
}
}
return pdfFormFields;
}
private List<PdfFormField> fillPdfFormFields(PdfArray array, List<PdfFormField> fields) {
array.forEach(pdfObject -> {
final PdfFormField field = PdfFormField.makeFormField(pdfObject, pdfFile);
fields.add(field);
final PdfArray fieldKids = field.getKids();
if (fieldKids != null) {
fillPdfFormFields(fieldKids, fields);
}
});
return fields;
}