2012-05-02 45 views
5

Tôi tò mò nếu có ai có kinh nghiệm viết JUnits cho các tệp PDF được tạo trong Java (đặc biệt là bởi iText). Tôi đã tìm kiếm nhanh trên google và tôi không thể tìm thấy bất kỳ điều gì cụ thể. Những gì tôi có thể làm cho đến nay là kiểm tra xem tệp PDF đã được tạo chưa, có số lượng trang nhất định và tài liệu bị đóng. Nhưng tôi không thể xác minh nội dung của tài liệu. Ai đó có thể cung cấp một ví dụ những gì họ đã làm trong quá khứ để đạt được kết quả như vậy? Hoặc tôi hoàn toàn sai và JUnits cho các tệp PDF của tôi có quá mức không? Cảm ơnViết JUnits cho PDF được tạo bởi iText

+0

Bạn có thể đọc lại PDF (với iText's [com.itextpdf.text.pdf.parser.PdfTextExtractor] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/ PdfTextExtractor.html) hoặc có thể là [com.itextpdf.text.pdf.PdfReader] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfReader.html)) và sau đó xác minh nội dung. – wchargin

+0

Một cách tiếp cận đơn giản để so sánh các tệp PDF là hiển thị chúng thành bitmap và so sánh các bitmap đó - đây là o.k. miễn là bạn quan tâm đến sự xuất hiện của các tệp PDF và không quan tâm đến siêu dữ liệu, v.v. –

Trả lời

2

Cho rằng bạn đang sử dụng Java, tôi đã xem xét số PDFBox (Apache). Những gì bạn đang yêu cầu là khá khó khăn vì PDF được truyền lại của bạn có thể không giống với cú pháp ban đầu của bạn. Bạn có thể cần phải suy nghĩ về roundtripping.

Các tài liệu như PDF có thể mong manh so với so sánh. Nếu bạn thấy rằng một so sánh thất bại nó có thể cho thấy ít dấu hiệu của sự thất bại ở đâu. Một tài liệu PDF có thể cực kỳ phức tạp (cây có nhánh cao). Bạn có thể cần phải tìm kiếm một canonicalization của tài liệu để so sánh chúng (tôi làm điều này cho các tài liệu XML).

Tôi đoán là một bài kiểm tra đầy đủ là quá mức cần thiết và các bài kiểm tra hiện tại của bạn càng tốt càng tốt với chi phí hợp lý.

CẬP NHẬT: Tôi đã kiểm tra PDFBox cho PDDocument.equals (PDDocument) và không có phương thức bằng sâu nào. Điều này cho thấy họ đã không tìm thấy nó đáng giá (nó đòi hỏi đệ quy qua nhiều subnodes). Ngoài ra còn có rất nhiều con số thực sự vì vậy tất cả sẽ được so sánh với một sự khoan dung.

Phương pháp bitmap có thể hoạt động với con người nhưng rất nhạy cảm với các vấn đề số thực - lỗi làm tròn sẽ viết một chút ở một pixel khác. Nó gần như chắc chắn sẽ hoạt động khác với một phiên bản hệ điều hành mới.

Các vấn đề liên quan