2016-04-27 48 views
2

我想获得我的项目中的字段页面, ,我不知道如何获取每个字段和字段的页码。 我有这样的代码:如何在PDFBox API 2中获取字段页面?

String formTemplate = "Template.pdf"; 
    String filledForm = "filledForm.pdf"; 
    PDDocument pdfDocument = PDDocument.load(new File(formTemplate)); 

    PDAcroForm acroForm = pdfDocument.getDocumentCatalog().getAcroForm(); 

    if (acroForm != null) 
    { 

     PDField field = acroForm.getField("name"); 
     field.getAcroForm().setNeedAppearances(true); 
     field.setValue("my name"); 
     acroForm.getField("date"); 
     field.setValue("my date"); 


    } 

    pdfDocument.save(filledForm); 
    pdfDocument.close(); 
} 

如何获取字段的页码?

感谢 罗恩

+1

与“日期”的行丢失的分配。 –

回答

1

这会告诉你什么是网页上(从0开始)出现在现场:

PDField field = acroForm.getField("date"); 
for (PDAnnotationWidget widget : field.getWidgets()) 
{ 
    PDPage page = widget.getPage(); 
    if (page == null) 
    { 
     // incorrect PDF. Plan B: try all pages to check the annotations. 
     for (int p = 0; p < doc.getNumberOfPages(); ++p) 
     { 
      List<PDAnnotation> annotations = doc.getPage(p).getAnnotations(); 
      for (PDAnnotation ann : annotations) 
      { 
       if (ann.getCOSObject() == widget.getCOSObject()) 
       { 
        System.out.println("found at page: " + p); 
        break; 
       } 
      } 
     } 
     continue; 
    } 
    int pageNum = pdfDocument.getPages().indexOf(page); 
    System.out.println("found at page: " + pageNum); 
} 
+0

它不工作..线程“主”中的异常java.lang.NullPointerException \t at org.apache.pdfbox.pdmodel.PDPageTree $ SearchContext。 (PDPageTree.java:355) \t at org.apache.pdfbox.pdmodel.PDPageTree $ SearchContext。 (PDPageTree.java:347) \t在org.apache.pdfbox.pdmodel.PDPageTree.indexOf(PDPageTree.java:319) \t在Main.main(Main.java:85) –

+0

@RonPartuk我实现了一个“计划B“表示getPage()返回null的情况。 –

+0

理论上,表单字段也可能与尚未成为页面树一部分的已命名页面模板相关联。这样的页面模板很少现在使用,但每隔一段时间,可能会遇到这样的动物... – mkl