2012-05-02 4 views
5

Java (특히 iText)로 생성 된 PDF에 대해 JUnits를 작성한 경험이있는 사람이 있는지 궁금합니다. 나는 구글에서 빠른 검색을했고 나는 특별한 것을 발견 할 수 없었다. 지금까지 내가 할 수 있었던 것은 PDF가 생성되었고 특정 페이지가 있고 문서가 닫혔는지 확인하는 것이 었습니다. 그러나 문서의 내용을 확인할 수 없었습니다. 그런 결과를 얻기 위해 과거에했던 일을 누군가가 보여 줄 수 있습니까? 아니면 내가 완전히 틀렸고 내 PDF 파일에 대한 JUnits이 과도한 것입니까? 감사합니다.iText가 생성 한 PDF 용 JUnits 작성하기

+0

아마 iText의 [com.itextpdf.text.pdf.parser.PdfTextExtractor] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/)에서 PDF를 다시 읽을 수 있습니다. PdfTextExtractor.html) 또는 [com.itextpdf.text.pdf.PdfReader] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfReader.html))를 입력 한 다음 내용을 확인하십시오. – wchargin

+0

PDF를 비교하는 간단한 방법은 비트 맵을 렌더링하고 비트 맵을 비교하는 것입니다. 이것이 o.k입니다. PDF의 모양에 관심이 있고 메타 데이터 등을 신경 쓰지 않는 한 –

답변

2

자바를 사용하고 있다면 PDFBox (Apache)을 보시기 바랍니다. 재 변환 된 PDF가 원본과 구문 적으로 동일하지 않을 수도 있으므로 귀하가 묻는 것은 상당히 어려운 일입니다. 라운드 트립을 고려해야 할 수도 있습니다.

PDF와 같은 문서는 비교할 때 취약 할 수 있습니다. 비교가 실패한 경우 오류가있는 위치를 거의 알려주지 못할 수 있습니다. PDF 문서는 매우 복잡 할 수 있습니다 (높은 분기 나무). 그들을 비교하기 위해 문서의 정규화 (canonicalization)를 찾아야 할 수도 있습니다 (XML 문서의 경우이를 수행합니다).

내 생각에, 완벽한 테스트는 잔인하며 현재 테스트는 합리적인 비용으로 가능한 한 좋은 것입니다.

업데이트 : PDFBox에서 PDDocument.equals (PDDocument)를 확인 했으므로 deep equals 메소드가 없습니다. 이것은 그들이 가치있는 것을 발견하지 못했음을 시사합니다 (많은 하위 노드를 통한 재귀가 필요합니다). 또한 많은 실수가 있기 때문에 이들 모두가 허용 오차와 비교되어야합니다.

비트 맵 방법은 사람에게는 효과적 일 수 있지만 실수 문제에는 매우 민감합니다. 반올림 오류는 다른 픽셀에 비트를 씁니다. 새로운 OS 버전에서는 거의 다르게 작동합니다.