2017-10-13 38 views
0

運行代碼後在控制檯上打印了「XFA Form」,但沒有打印字段。有什麼特別的原因嗎?驗證表單是否使用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,並最終使用iText將XFA xml重新存儲爲pdf。 – mkl

+0

我成功提取了XML。問題在於操縱XML。我無法在特定文本字段中輸入值/數據。 –