2012-11-19 45 views
7

Javaコードから入力する必要のあるフォームフィールドを含むPDFファイルがあります。私はこのためにPDFBoxライブラリを使用して、このコード:PDFフォームでのPDFBoxの埋め込みが機能しない

PDDocument pdfDoc = PDDocument.load("C:\\Users\\igor\\Desktop\\test.pdf"); 
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog(); 
PDAcroForm acroForm = docCatalog.getAcroForm(); 
PDField field = acroForm.getField("applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]"); 
if (field != null) { 
    field.setValue("Milan"); 
} else { 
    System.err.println("No field found with name:" + "applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]"); 
} 
pdfDoc.save("C:\\Users\\igor\\Desktop\\testout.pdf"); 
pdfDoc.close(); 

PDFは私が作成されていないので、私は私が正しく理解していれば、FDFとXFAがあるフォームの種類のファイルの使用(知りませんフォーム)。 PDFは私が作成されていないので、私は、フォームフィールドの名前を見つけるために、このツールhttp://support.persits.com/pdf/demo_formfields.aspを使用し、それは私にこれを与えた:

applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0] 

私はこの長いフィールド名を使用する場合、私は得ることはありませんエラーは発生しますが、結果のPDFにはフィールドに入力した値は含まれません。フィールド名に何か問題があったと思っていたので、Pdftk toolを使ってフィールド名にはtxtFirstNameという名前を付けました。しかし私がちょうどそれを使用すると、私はNo field found with name: txtFirstNameエラーが発生します。助けて?

+0

フィールド名は、XFAフィールドであることを示しています。たぶん、PDFBoxでXFAフィールドの扱いを変えなければならないのでしょうか? (私はPDFBox APIを全く知らない...) – mkl

答えて

14

まあ、私はこの質問は現在、非常に古いです実現が、私はつまずい私の解決策を投稿するべきだと思っていました。

フィールドのIDは、PDFBoxを使用してPDFフォームで確認できます。それは非常に豊富なAPIを持っています、あなたがしなければならないことを理解するために残念ながら多くの読書が必要です。

フォームフィールドの名前を取得するには、PDFieldクラスの一部であるgetFullyQualifiedNameを使用します。

残念ながら、PDAcroformクラスからすべてのファイル名を取得することはできません。したがって、フォーム名の配列を作成して、それぞれをループすることができます。

// Load the pdfTemplate 
    pdfTemplate = PDDocument.load(file); 

    PDDocumentCatalog docCatalog = pdfTemplate.getDocumentCatalog(); 
    PDAcroForm acroForm = docCatalog.getAcroForm(); 

    // Get field names 
    List<PDField> fieldList = acroForm.getFields(); 

    // String the object array 
    String[] fieldArray = new String[fieldList.size()]; 
    int i = 0; 
    for (PDField sField : fieldList) { 
     fieldArray[i] = sField.getFullyQualifiedName(); 
     i++; 
    } 

    // Loop through each field in the array and do something 
    for (String f : fieldArray) { 
     PDField field = acroForm.getField(f); 

     System.out.println("f is: " + f); 
     if (f.contains("EXAMPLE FORM FIELD NAME")) { 
      DO SOMETHING 
          String value = "example value"; 
      field.setValue(value); 
      System.out.println("printed: " + value + " to: " + f); 
     } 
    } 

    // Save edited file 
    pdfTemplate.save(sPdfTemplate); 
    pdfTemplate.close(); 

これは誰かを助けることを望みます。

乾杯

-4

私は同じ問題を抱えている それが仕事になりますあなたのPDFフォームを作成するためには、Adobe Acrobat X Proを使用して、空白のdocxファイルで始まり、 ください正しく

関連する問題