2017-10-13 3 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를 조작하고 결국 iText를 사용하여 다시 XFA XML을 pdf에 다시 저장할 수 있습니다. – mkl

+0

XML을 성공적으로 추출했습니다. 문제는 XML 조작에있었습니다. 특정 텍스트 필드에 값/데이터를 넣을 수 없습니다. –