2016-06-18 19 views
0

나는 pdfbox-1.8.12를 사용하여 XFA를 얻기 위해 PDF에서 내용을 읽는다. 모든 필드 값을 놓치지 않고 대부분의 파일에 대해 XFA를 성공적으로 가져올 수있었습니다.XFA 채워진 필드가 누락 되었습니까?

error.pdf과 같은 일부 파일에서 문제가 발생합니다. 필자는 CIN과 같은 값이없는 필드가 많지만 PDF 뷰어에서 파일을 열면 여우 또는 Acrobat에서 해당 필드를 표시합니다.

public static byte[] getParsableXFAForm(File file) { 
    if (file == null) 
     return null; 
    PDDocument doc; 
    PDDocumentCatalog catalog; 
    PDAcroForm acroForm; 
    PDXFA xfa; 
    try { 
     doc = PDDocument.load(file); 
     catalog = doc.getDocumentCatalog(); 
     acroForm = catalog.getAcroForm(); 
     xfa = acroForm.getXFA(); 
     byte[] xfaBytes = xfa.getBytes(); 
     doc.close(); 
     return xfaBytes; 
    } catch (IOException e) { 
     // handle IOException 
     // happens when the file is corrupt. 
     System.out.println("IOException"); 
     return null; 
    } 
} 

그런 다음 byte []가 String으로 변환됩니다.

This은이 파일의 xfa이며 'U72300DL1996PLC075672'로 검색하면이 파일이 누락됩니다.

모든 파일을 제공하는 normal 파일입니다.

어떤 아이디어? 나는 모든 것을 시도했지만 내 생각에 독자는 그 가치를 볼 수 있기 때문에 나는 또한 할 수 있어야합니다.

편집 : 파일을 다운로드해야하므로 브라우저에서 볼 수 없습니다.

답변

3

다른 서명을 적용하기 전에 양식에있는 여러 가지 상태를 나타내는 양식 내에 XFA 콘텐츠의 항목이 여러 개 있습니다. 당신이

PDDocument.load(file)

를 사용하는 것처럼 PDF 순차적으로 구문 분석 및 최신 XFA 내용은 포착되지 않습니다. 당신은

PDDocument.loadNonSeq(file,null)

에 외부 참조 정보가 사용되며, 가장 최근의 XFA 당신이 찾고있는 정보를 포함 추출되는 것을 변경하는 경우.

PDFBox 1.8.x의 경우 Xref 정보를 따라 사양에 맞게 PDF를 구문 분석하려면 항상 PDDocument.loadNonSeq을 사용해야합니다. PDDocument.load은 순차적 구문 분석이 폴백 될 수있는 (Xref 관련) 구문 분석 오류가있는 파일을 처리하는 데 사용해야합니다.

PDFBox 2.x의 경우 PDDocument.load은 외부 참조 즉, 1.8에서 'PDDocument.loadNonSeq'와 같은 구문 분석을하고 오류가있는 경우 순차적으로 구문 분석이 수행됩니다.

+0

감사합니다. 나는 할 수있는 모든 일을 시도했다. 나는 파싱의 오류라고 생각했다. 대신 파일을 다시 저장하고 파싱했습니다. 다시 한 번 감사드립니다! 건배!! – Mayank