Java 我能';t值字段iText 2.1.7

Java 我能';t值字段iText 2.1.7,java,pdf-generation,itext,Java,Pdf Generation,Itext,我们通过模板创建了PDF文件,并用数据库中的值填充字段“名称字段”=“值”。 现在我们要读取前面创建的PDF文件中一个字段的值 代码 reader = new PdfReader("C:\\temp\\letter.pdf"); baos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, baos); form = stamper.getAcroFields(); System.out.println(form

我们通过模板创建了PDF文件,并用数据库中的值填充字段<代码>“名称字段”=“值”。 现在我们要读取前面创建的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”,并且它不识别任何字段。就好像这些字段不存在一样

任何帮助都将不胜感激。谢谢

嗨, 我有两种文件类型。一个被压平了:-(另一个没有。 对于最后一个文件,我使用了以下代码:

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();
PdfReader reader=新的PdfReader(文件);
PdfDictionary root=reader.getCatalog();
PdfDictionary form1=root.getAsDict(PdfName.ACROFORM);
PdfArray fields=form1.getAsArray(PdfName.fields);
PdfDictionary页面;
PdfArray-annots;

对于布鲁诺建议的(inti=1;i),如果您只想阅读,请仅使用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);
}
PdfReader=newpdfReader(“C:\\temp\\letter.pdf”);
AcroFields AcroFields=reader.getAcroFields();
Map fields=acroFields.getFields();
迭代器it=fields.entrySet().Iterator();
while(it.hasNext()){
Entry=it.next();
字符串值=acroFields.getField(entry.getKey());
System.out.println(entry.getKey()+“:”+值);
}
找不到字段的原因可能有很多:

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

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

从来没有iText版本2.7.1。假设你使用的是iText 2.1.7,如果你想得到问题的答案,你应该阅读,你必须提供
letter.pdf
供检查。最后一点:如果你只想阅读字段值:你到底为什么要创作g a
PdfStamper
实例?就好像这些字段不存在一样-你有可能把公司压平了吗?谢谢Pankajparkar。我为我的错误感到抱歉…我如何附加PDF文件?