我正在使用@ASu之前建议的代码:
package pdf_form_filler;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.interactive.form.*;
import java.io.File;
import java.util.*;
public class pdf_form_filler {
public static void listFields(PDDocument doc) throws Exception {
PDDocumentCatalog catalog = doc.getDocumentCatalog();
PDAcroForm form = catalog.getAcroForm();
List<PDFieldTreeNode> fields = form.getFields();
for(PDFieldTreeNode field: fields) {
Object value = field.getValue();
String name = field.getFullyQualifiedName();
System.out.print(name);
System.out.print(" = ");
System.out.print(value);
System.out.println();
}
}
public static void main(String[] args) throws Exception {
File file = new File("test.pdf");
PDDocument doc = PDDocument.load(file);
listFields(doc);
}
}
但是,我一直在为PDFieldTreeNode找不到符号错误。我有最新的pdfbox(2.0.4),但无论如何我都找不到它的课程。我尝试使用PDField代替但后来得到.getValue
的错误答案 0 :(得分:0)
要获取所有终端字段,请执行以下操作:
Iterator<PDField> fieldIterator = catalog.getAcroForm();
while (fieldIterator.hasNext())
{
PDField pdField = fieldIterator.next();
// do stuff with the field
}
form.getFields()
仅获取顶级字段,包括非终结字段(即没有值但字段为儿童的字段)。
可以在PrintFields.java example中找到更高级的示例。