PDFファイルの検査に最適なツールですか?[閉まっている]


91

PDFファイルを検査するためにどのツールをお勧めしますか?

使用例:(iTextを使用して)プログラムでPDFファイルを生成しようとしています。特定のレイアウトを作成するのに問題がありますが、テキストを希望どおりにレイアウトしたPDFファイル(Wordから生成)があります。彼らのやり方をリバースエンジニアリングしたいと思います。

PDF Inspectorは良いようですが、Windows用のものを探しています。


PDFインスペクターはJavaベースなので、マルチプラットフォームです。
david.perez 2017

2
ただし、Windowsでは動作しないようです。クリックしても、jarファイルは何もしません。コマンドラインで呼び出されると、次のようになりますno main manifest attribute, in PDF Document Inspector.jar
トム

@ david.perez Javaベースですが、アップルでラップされているため、アップル専用のディストリビューションです。"PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar" jarがありますが、java -jar "PDF Document Inspector.jar"として起動できません。また、com.apple.cocoa。*がたくさんありますそれはプラットフォーム固有です。:(
andrej

私は今、iText Rups、マルチプラットフォーム、Javaベースをうまく使用しています。
david.perez

回答:


18

Adobe Acrobatには、PDFファイルを検査できる非常に優れた非表示モードがあります。それを説明するブログ記事をhttps://blog.idrsolutions.com/2009/04/viewing-pdf-objects/に書きました


これにはプラグインが必要なようです。少なくともLinux上のAcrobat Reader 9.5.5では利用できません。
Adam Spiers 2014

3
@AdamSpiers、プリフライトダイアログボックスはAdobe Acrobatではなく、Adobe Acrobatの機能です
IPSUS

...そして、Acrobat(以前のAcrobat Exchange)はLinuxでは利用できません:-/
Adam Spiers 2015年

7
プリフライトダイアログボックスには、実際にはAdobe Acrobat Proが必要です。Adobe Acrobat Standardでは使用できません。
Futal

1
そして、実際に使用するのはUIの悪夢です。
ジョン

83

他の回答で言及されているGUIベースのツールのほかに、元のPDFソースコードを別の表現に変換して、テキストエディターで(現在は変更されたファイル)を検査できるいくつかのコマンドラインツールがあります。以下のツールはすべて、Linux、Mac OS X、その他のUnixシステム、またはWindowsで動作します。

qpdf (お気に入り)

qpdfを使用して(ほとんどの)オブジェクトのストリームを解凍し、ObjStmオブジェクトを個々の間接オブジェクトに分解します。

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdf自身を「PDFファイルに対して構造的でコンテンツを保持する変換」を行うツールとして説明しています

次にuncompressed-qpdf.pdf、お気に入りのテキストエディタでファイルを開いて+検査します。以前に圧縮された(したがって、バイナリ)バイトのほとんどは、プレーンテキストになります。

mutool

MuPDF PDFビューアーにmutoolバンドルされているコマンドラインツールもあります(これはGhostscriptの姉妹製品であり、同じ会社であるArtifexによって作成されています)。次のコマンドもストリームの圧縮を解除し、テキストエディターでの検査をより簡単にします。

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFoは、PDF形式で動作するFreeSoftware / OpenSourceライブラリで、などのいくつかのコマンドラインツールが含まれていpodofouncompressます。次のように使用して、PDFストリームを解凍します。

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDFは、PDFファイルの探索に役立つPythonベースのツールです。その元々の目的はPDFベースのマルウェアの研究と解剖でしたが、完全に無害なPDFファイルの構造を調査することも役立つと思います。

インタラクティブに使用して、PDFに含まれているオブジェクトとストリームを「参照」できます。

ここでは使用例は示しませんが、そのドキュメントへのリンクのみを示します。

pdfid.py そして pdf-parser.py

pdfid.pyそしてpdf-parser.py2つのですディディエ・スティーヴンスのPDFツールはPythonで書かれました。

彼らの背景は、悪意のある PDFの調査にも役立ちますが、無害なPDFファイルの構造と内容を分析することも役立ちます。

以下は、PDFオブジェクトnoの非圧縮ストリームを抽出する方法の例です。5を* .dumpファイルに:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

最終メモ

  1. PDF内の一部のバイナリパーツは、PDF内に埋め込まれ、ネイティブ形式で使用されるため、必ずしも圧縮できない(または人間が読み取れるASCIIコードにデコードできる)とは限らないことに注意してください。このようなPDFパーツは、JPEG画像、フォント、またはICCカラープロファイルです。

  2. 上記のツールと与えられたコマンドラインの例を比較すると、それらがすべて同じ出力を生成するわけではないことがわかります。それら自体の違いを比較する作業は、PDF構文とファイル形式の性質をよりよく理解するのに役立ちます。


42

私が使用しiTextのRUPSのLinuxで(PDF構文を読み、更新を)。Javaで書かれているため、Windowsでも動作します。PDFファイル内のすべてのオブジェクトをツリー構造で参照できます。また、Flateでエンコードされたストリームをオンザフライでデコードして、検査を容易にすることもできます。

ここにスクリーンショットがあります:

iText RUPSスクリーンショット


9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version-どうやってこれを実行するのですか?編集:それを考え出した。SourceForgeが提供するデフォルトのファイルはダウンロードしないでください。依存関係を含む.jarをダウンロードする必要があります。
Zero3 2015

2
@ Zero3はちょうど同じことに出くわしました。コメントありがとうございます。
2015

1
@KurtPfeifle私は完全に同意します。残念ながら、多くのソフトウェア(このような!)は、SourceForgeからのみ入手できます。メンテナーがプロジェクトを他の場所にまだ移動しておらず、移動することもないためです。最近、SourceForgeから何かをダウンロードするときは十分に注意してください...
Zero3

7
はい-Windowsユーザーの場合、コンパイル済みjarとして、さらにはexeとしても。github.com/itext/rups/releases/latestを
Amedee Van Gasse

1
@AmedeeVanGasseこの回答のスクリーンショットは、ページのビューを示しています(ドキュメントツリーと外部参照タブの間)。Windowsのv5.5.9でそのビューを表示するにはどうすればよいですか?
iPDFdev 2016


5

PDFBoxを使用して成功しました。これは、コードがどのように見えるかのサンプルです(バージョン0.7.2以降)。これは、提供された例の1つからのものである可能性があります。

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());


3

別のオプションもあります。Adobe Acrobat Proは、PDFの内部ツリー構造を表示することもできます。

  1. プリフライトを開く
  2. オプションに移動します(右上隅)
  3. 内部PDF構造

さらに、Adobe Acrobat Proは、ドキュメントフォントの内部構造をPDFで表示することもできます。他のほとんどの「PDFツリー構造ビューア」には、このオプションがありません。

ここに画像の説明を入力してください


2
これは、@ mark-stephensが受け入れた回答で説明していることです。
koppor

3
@ mark-stephensの回答は、将来なくなる可能性がある(SOでは推奨されない)ブログ投稿へのリンクのみです。vadimoは実際に答えを提供します。
ヒトデ2018

1

Python内からプログラムで作業する場合は、pdfminerが適しています。オブジェクト階層としてメモリ内のPDF構造を操作したり、XMLとしてシリアル化したりできます。



-6

私の提案は、PDFファイルの重要なテキスト編集作業を行うのに非常に役立つFoxit PDFリーダーです。


6
Foxit ReaderでPDF Inspectorに似たPDFの内部構造を表示する方法を見つけることができませんでした(質問で参照)
bmaupin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.