2012-05-02 28 views
5

Herhangi biri Java'da oluşturulan PDF'ler için JUnits yazarken (özellikle de iText tarafından) bir deneyim yaşadığında merak ediyorum. Google'da hızlı bir arama yaptım ve belirli bir şey bulamadım. Şimdiye kadar yapabildiğim şey, PDF'nin oluşturulduğunu, belirli miktarda sayfanın olduğunu ve belgenin kapatıldığını kontrol etmekti. Ancak, belgenin içeriğini doğrulayamadım. Birisi böyle bir sonuca ulaşmak için geçmişte neler yaptığını örnek verebilir mi? Yoksa tamamen yanlış mıyım ve PDF'lerim için JUnits aşırı mı? TeşekkürleriText tarafından oluşturulan PDF için JUnits oluşturma

+0

PDF'yi muhtemelen okuyabilirsiniz (iText'in [com.itextpdf.text.pdf.parser.PdfTextExtractor] ile (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/ PdfTextExtractor.html) veya belki bir [com.itextpdf.text.pdf.PdfReader] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfReader.html)) ve sonra içeriği doğrulayın. – wchargin

+0

PDF'leri karşılaştırmak için basit bir yaklaşım, bunları bitmap'lere dönüştürmek ve bu bitmap'leri karşılaştırmaktır - bu, o.k. PDF'lerin görünümü ile ilgilendiğiniz ve meta verilerle ilgilenmediğiniz sürece. –

cevap

2

Java kullandığınızı göz önünde bulundurarak PDFBox (Apache) 'ye bakın. Yeniden dönüştürülen PDF'niz orijinalinizle eş anlamlı olarak aynı olmayabilir diye sorduğunuz şey oldukça zorlayıcıdır. Roundtripping düşünmek gerekebilir.

PDF gibi belgeler karşılaştırmaya göre kırılgan olabilir. Bir karşılaştırmanın başarısız olduğunu tespit ederseniz, başarısızlığın nerede olduğuna dair çok az bilgi verebilir. Bir PDF belgesi son derece karmaşık olabilir (çok dallanmış ağaçlar). Karşılaştırmak için belgenin kurallara uygun hale getirilmesi gerekebilir (bunu XML belgeleri için yapıyorum).

Tahminin tam bir test olduğunu ve mevcut testlerin mümkün olduğunca makul maliyetle mümkün olduğunu tahmin ediyorum.

GÜNCELLEME: PDDocument.equals (PDDocument) için PDFBox'u denetledim ve derin eşittir yöntemi yoktur. Bu, değerli bulduklarını (birçok alt nokta üzerinde yineleme gerektirdiğini) gösterir. Ayrıca, birçok gerçek sayı vardır, dolayısıyla bunların hepsi bir hoşgörüye karşı karşılaştırılmalıdır.

Bitmap yöntemi insanlar için işe yarayabilir, ancak gerçek sayı sorunlarına karşı çok hassastır - bir yuvarlama hatası farklı bir pikselde biraz yazacaktır. Yeni OS sürümü ile neredeyse kesinlikle farklı davranacaktır.

İlgili konular