2017-10-13 1 views
0

"XFAフォーム"はコードを実行した後にコンソールに表示されますが、フィールドは表示されませんでした。なぜ特別な理由がありますか?ここでフォームがAcroformまたはXFAテクノロジを使用しているかどうかを確認した後、コンソールにフィールドは表示されませんでしたか?

はコードです:

public class VerifyPDFForm { 

public static void main(String[] args) throws IOException { 
    String SRC = "c:/Temp/testCopy.pdf"; 
    String DEST = "c:/Temp/test10.txt"; 

    PrintStream out = new PrintStream(new FileOutputStream(DEST)); 
    PdfReader reader = new PdfReader(SRC); 
    AcroFields form = reader.getAcroFields(); 
    XfaForm xfa = form.getXfa(); 
    System.out.println(xfa.isXfaPresent() ? "XFA form" : "AcroForm"); 
    Set<String> fields = form.getFields().keySet(); 
    for (String key : fields) { 
     System.out.println(key); 
    } 
    System.out.flush(); 
    System.out.close(); 
    reader.close(); 
} } 
+0

'fields'が空であるかどうかチェックしましたか? – assembler

+0

フィールドは実行時に入力されるようです。しかし空であるかどうかにかかわらずフィールドを印刷してはいけませんか? JavaとITextにはまったく新しいものです。 –

+0

もちろん 'fields'は実行時に読み込まれますが、' fields'が空の場合はループを実行せず、ループの中にフィールドキーを表示します。 – assembler

答えて

0

私はいくつかのPDFファイルを使用してコードをテストしました。純粋なAcroFormフォームまたはAcroForm/XFAハイブリッドフォームを使用している場合のみ、純粋なXFAフォームではなく、フィールドを取得します。

これは、AcroFormフィールド定義がある場合にのみ内部フィールドコレクションが埋められることを示すクイックコードレビューと一致します。

このように、特定の理由があり、あなたの質問

に関する?

...理由は、iText 5.xのXFAサポートが限定されており、純粋なXFAフォームで個々のフィールドを検査することが含まれていないからです。

+0

ありがとうございます。 JavaとIText 5.xを使用して、純粋に動的なXFAフォームのフィールドにデータを入力することは可能ですか?それが私の最終目標です。 –

+0

あなたはiTextを使用してXFAストリームを抽出し、次に選択したxml APIを使用してiteを操作し、最終的にXFA XMLをiTextでpdfに再び保存することができます。 – mkl

+0

XMLを正常に抽出しました。問題は、XMLを操作することでした。私は特定のテキストフィールドに値/データを入れることができませんでした。 –

関連する問題