2012-05-02 21 views
5

Java(特にiText)で生成されたPDF用のJUnitを作成した経験がある人は誰でも気になります。私はgoogleですばやく検索し、特定のものは何も見つかりませんでした。 私がこれまでにやったことは、PDFが生成され、ページが一定量あり、文書が閉じていることを確認することでした。しかし、私は文書の内容を確認することができませんでした。そのような結果を達成するために過去に何をしたのか、誰かが例を挙げることができますか?あるいは、私は完全に間違っていますか?私のPDFのJUnitsは過剰ですか? ありがとうiTextで生成されたPDF用のJUnitsの作成

+0

おそらくPDFを読むことができます(iTextの[com.itextpdf.text.pdf.parser.PdfTextExtractor](http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/)。 PdfTextExtractor.html)またはおそらく[com.itextpdf.text.pdf.PdfReader](http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfReader.html))、内容を確認してください。 – wchargin

+0

PDFを比較する簡単な方法は、PDFをビットマップにレンダリングし、それらのビットマップを比較することです。これはo.kです。あなたがPDFの外観に興味を持ち、メタデータなどを気にしない限り –

答えて

2

Javaを使用していると仮定すると、PDFBox(Apache)を見てください。再変換されたPDFがオリジナルと構文的に同じでない可能性があるため、あなたが求めていることは非常に難しいです。ラウンドトリップを考える必要があるかもしれません。

PDFなどのドキュメントは、比較すると壊れやすいかもしれません。比較が失敗した場合は、どこで障害が発生しているかをほとんど示さない可能性があります。 PDF文書は非常に複雑なものになることがあります。それらを比較するためには、ドキュメントの正規化を探す必要があります(XMLドキュメントの場合はこれを行います)。

私の推測では、完全なテストは過度のものであり、あなたの現在のテストは合理的なコストでできるだけ良いと思っています。

更新: 私はPDFBoxにPDDocument.equals(PDDocument)をチェックしてあり、deep equalsメソッドはありません。これは、それが価値があるとは思わないことを示しています(多くのサブノードにわたって再帰が必要です)。また、多くの実数があるので、これらはすべて公差と比較されなければならない。

ビットマップ方法は人間にとっては有効ですが、実数問題には非常に敏感です。丸め誤差は、別のピクセルにビットを書き込むことになります。新しいOSバージョンでは、動作はほぼ確実に異なります。

関連する問題