【问题标题】:I can't value fields iText 2.1.7我无法评估字段 iText 2.1.7
【发布时间】:2015-02-18 16:17:51
【问题描述】:

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

代码

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();

非常感谢!!! 问候, 市政

【问题讨论】:

  • 从来没有 iText 版本 2.7.1。假设您使用的是 iText 2.1.7,您应该阅读 stackoverflow.com/questions/25696851/… 如果您想要回答您的问题,您必须提供 letter.pdf 以供检查。最后:如果您只想读取字段值:您到底为什么要创建 PdfStamper 实例?
  • 好像这些领域不存在 - 你可能把公司弄平了吗?
  • 感谢 Pankajparkar。我很抱歉我的错误...我怎样才能附加 PDF 文件?

标签: java pdf-generation itext


【解决方案1】:

正如 bruno 建议的那样 - 如果您只想阅读,请仅使用 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 已被展平)
  • 字段名称不同(例如 Customer-Name)
  • 您的字段有一个父项(因此名称是 parent.CUSTOMER-NAME)
  • 表单域未正确插入
  • ...

你能看到例如中的字段吗? adobe 阅读器?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2020-11-09
    • 2017-04-26
    相关资源
    最近更新 更多