我不能重视字段iText 2.1.7

时间:2015-02-18 16:17:52

标签: java pdf-generation itext

我们已经通过模板创建了PDF文件,并使用数据库中的值填充字段。 "Name field" = "value". 现在我们想要读取我们之前创建的PDF文件中某个字段的值。

CODE

reader = new PdfReader("C:\\temp\\letter.pdf");

baos = new ByteArrayOutputStream();

stamper = new PdfStamper(reader, baos);

form = stamper.getAcroFields();

System.out.println(form.getField("CUSTOMER-NAME"));

但是当我这样做时返回“null”并且它不识别任何字段。就好像字段不存在一样。

任何帮助都会受到赞赏。感谢。

您好, 我有2种文件类型。一个被夷为平地:-(另一个没有。 对于最后一个文件,我正在使用此代码并且它可以工作:

PdfReader reader = new PdfReader(FILE);
PdfDictionary root = reader.getCatalog();
PdfDictionary form1 = root.getAsDict(PdfName.ACROFORM);
PdfArray fields = form1.getAsArray(PdfName.FIELDS);

PdfDictionary page;
PdfArray annots;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    page = reader.getPageN(i);
    annots = page.getAsArray(PdfName.ANNOTS);
    for (int j = 0; j < annots.size(); j++) {
        fields.add(annots.getAsIndirectObject(j));
    }
}

AcroFields form2 = reader.getAcroFields();

非常感谢!!! 问候, 穆尼

1 个答案:

答案 0 :(得分:0)

正如布鲁诺所说 - 如果你只想阅读,只能使用PdfReader ......

尝试以下代码,看看是否打印出来的东西:

PdfReader reader = new PdfReader("C:\\temp\\letter.pdf");
AcroFields acroFields = reader.getAcroFields();
Map<String, AcroFields.Item> fields = acroFields.getFields();
Iterator<Entry<String, Item>> it = fields.entrySet().iterator();

while (it.hasNext()) {
    Entry<String, Item> entry = it.next();
    String value = acroFields.getField(entry.getKey());
    System.out.println(entry.getKey()+":"+value);
}

找不到您的字段可能有很多原因:

  • PDF根本不包含PDF表单字段(pdf已被展平)
  • 字段名称不同(例如,客户名称)
  • 您的字段有父(因此名称为parent.CUSTOMER-NAME)
  • 表单字段未正确插入
  • ...

你能看到例如中的字段吗? adobe reader?