私は2つのpdfファイルの違いを見つける必要があります。任意のPython関連ツールには、2つのPDFのdiffを直接与える機能がありますか?Pythonで2つのPDFファイルの差分を取得する方法は?
答えて
「違い」とはどういう意味ですか? PDFのテキストの違いやレイアウトの変更(埋め込みグラフィックのサイズが変更されたなど)。最初は検出が容易で、2番目は取得するのがほとんど不可能です(PDFは非常に複雑なファイル形式であり、無限のファイルフォーマット機能を提供します)。
テキスト差分を取得したい場合は、2つのPDFのpdf to textユーティリティを実行し、Pythonの組み込みdiffライブラリを使用して、変換されたテキストの差分を取得します。
この質問は、PDFとテキスト変換をPython:Python module for converting PDF to textで扱っています。
この方法の信頼性は、使用しているPDF Generatorによって異なります。たとえば、 Adobe AcrobatといくつかのGhostscriptベースのPDF-Creatorを使用してSAMEワードドキュメントから2つのPDFを作成すると、元のドキュメントは同じですが、まだ差分が得られることがあります。
これは、ソース文書の情報をPDFにエンコードする方法が数多くあり、各コンバータが異なるアプローチを使用しているためです。多くの場合、pdfからテキストへの変換では、特に複雑なレイアウトやテーブルでは正しいテキストフローがわかりません。
テキストだけが行います。 pdfジェネレータは問題ではありません。 – Goutham
イメージをサポートする必要がある場合は、pdfからJPGを抽出することができます。http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.htmlまたはpdfをイメージに変換して比較することができます。 –
チェックこれを、それが役立つことができます:http://pybrary.net/pyPdf/
pyPdfは私のテストであまり強くなかった。Illustrator/InDesignやその他のベクター描画プログラムで作成されたpdfsでクラッシュしました。ただし、Officeアプリからの簡単なPDFの場合は問題ありません。はるかに堅実な選択肢は、xpdfツールキットのpdftotextです。 – fbuchinger
私はあなたのユースケースを知らないが、ReportLabのを使用してPDFを生成するスクリプトの回帰テストのために、私は変換
- によって差分PDFを行いますPIL
などを使用して、標準のPDFのページ画像に対して、各ページに相違取得ghostsript
im1 = Image.open(imagePath1)
im2 = Image.open(imagePath2)
imDiff = ImageChops.difference(im1, im2)
私のケースでは、これはコード変更のために導入された変更をフラグするために機能します。
あなたのステップ#1の参考資料はありますか? – yucer
暗号化されたpdf unittestと同じ質問にお答えいただきましたが、pdfminerもpyPdfもうまく動作しません。
ここでは、2つのコマンド(pdftocairo、pdftotext)がテストに最適です。 (Ubuntuのインストール:のpoppler-utilsのインストールapt-getの)
あなたがしてPDFコンテンツを取得することができます。
from subprocess import Popen, PIPE
def get_formatted_content(pdf_content):
cmd = 'pdftocairo -pdf - -' # you can replace "pdftocairo -pdf" with "pdftotext" if you want to get diff info
ps = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = ps.communicate(input=pdf_content)
if ps.returncode != 0:
raise OSError(ps.returncode, cmd, stderr)
return stdout
はpdftocairo PDFファイルを再描画することができ、pdftotextは、すべてのテキストを抽出することができそうです。
そして、あなたが比較できる2つのPDFファイル:c1 = get_formatted_content(open('f1.pdf').read())
c2 = get_formatted_content(open('f2.pdf').read())
print(cmp(c1, c2)) # for binary compare
# import difflib
# print(list(difflib.unified_diff(c1, c2))) # for text compare
- 1. Pythonは2つのタイムスタンプの差を数分で見つける
- 2. pandasを使ってPythonで2つのファイルを交差させる方法は?
- 3. どのようにPythonで2つの辞書の差分を取得するには?
- 4. Androidアンドロイドの2つのタイムゾーンの時間差を取得する方法は?
- 5. ベロシティテンプレートの2つの日付の日数差を取得する方法
- 6. bigqueryの2つのタイムスタンプの差(時間単位)を取得する方法
- 7. 2つの日付の時間差(時間単位)を取得する方法
- 8. 石英:2つの画像の差分画像を取得する
- 9. 2つのxmlファイルの階層的差分を表示する
- 10. アンドロイドの資産からPDFファイルを取得する方法は?
- 11. 2つの異なるディレクトリからの2つのファイルの差分
- 12. 2つの日付の差を取得する
- 13. Pythonでlogging.FileHandlerのファイル名を取得する方法は?
- 14. Pythonでxmlファイルのルートノードを取得する方法は?
- 15. Java Pdf差分ライブラリ
- 16. 私が.txtファイルから得た2つの値を差し引く方法
- 17. ビデオとPDFファイルのサムネイルスナップショットを取得する方法
- 18. ベースファイルと差分ファイルからファイルを変更する方法は?
- 19. MatlabまたはExcelを使用して2つのテーブルの行の交差を取得する方法は?
- 20. 2つのデータベースのVSDBCMDの差分?
- 21. Pythonで2つのファイルをマージする方法
- 22. 2つの日付間の差異を取得します。
- 23. 2つの日付間の差(分)
- 24. PHPの2つの日付間の絶対日付の差異を取得する方法は?
- 25. 2つにPDFを分割する
- 26. python - 2つの実装のパフォーマンスの差
- 27. 2つのDataFramesの違いを取得する方法は?
- 28. フォーム上の2つのフィールドの差分を計算する方法Ruby on Railsをサブミットする方法
- 29. 複数のPDFファイルを1つのPDFにマージする方法
- 30. 2つのサブクエリのカウントの差を取得
Diffのテキストまたは全体の内容やサイズ? – Steen
テキストが表示されます。 – Goutham