PDFデバッガーを使用してPDFファイルのコードを検査する方法

PDFデバッガーを使用してPDFファイルのコードを検査する方法

Apple は macOS Sonoma での直接的な PostScript ファイルのサポートを終了しましたが、PDF デバッガーを使用すれば、PDF ファイルの内容を確認することができます。

PDF ― ウェブ上で広く普及しているドキュメントフォーマットは、1980年代初頭にAdobe Systemsによって発明されました。当時、レーザープリンターはAppleのLaserWriterプリンターと、世界初の商用デスクトップパブリッシングシステムの一つとなったMacintosh Plusの登場により、ようやく成熟期を迎えたばかりでした。

PostScript - PDFの起源

PostScriptは、画面上または紙上でページをどのようにレイアウトするかを記述する言語です。PostScriptは当初レーザープリンターのROMで使用されていましたが、後にスティーブ・ジョブズが2社目の会社であるNeXT社が製造したコンピューターにも使用されるようになりました。

NeXT のオペレーティング システム NeXTStep (後に OpenStep と呼ばれる) は、テキスト、図形、画像の画面表示に Display PostScriptを使用することで、初期の画面表示の制限を克服しました。

AdobeのオリジナルのPDFファイル規格は技術的には純粋なPostScriptではありませんでしたが、PostScriptから派生したものです。2000年に公開されたバージョン1.3では、PostScript Language Level 3のイメージングモデルのサポートが追加されました。

また、現在は廃止されているオリジナルの Adob​​e フォント標準である Type 1 もサポートしていましたが、これについては今後の記事で取り上げます。

PDF および .ps ファイル

数年後、AdobeはPortable Document Format(PDF)を導入しました。これは文書およびWebの標準となっています。PDFは元々Adobe独自のフォーマットでしたが、2008年にISO 32000として標準化されました。

この規格は2020年に再度改訂されました。

当時の Adob​​e の経営陣の多くは PDF の需要がないと判断したため、PDF はほとんど日の目を見ることはありませんでした。また、グラフィック デザイン、デスクトップ パブリッシング、印刷業界では、依然として PostScript がページ記述言語として主流でした。

PDFには、フォーム、デジタル署名、3Dオブジェクト、ビデオなど、さまざまなコンテンツを埋め込むことができます。PDFファイルは暗号化したり、パスワードで保護したりできますが、Adobeは最近、オリジナルのPostScriptフォント形式であるType 1フォントのサポートを終了すると発表しました。

現代のコンピューターでPDFファイルを開くと、アプリケーションはオペレーティングシステムまたはライブラリコードを使用してPDFファイルの命令を読み取り、OS上で表示するためのネイティブ描画ルーチンに変換します。

macOSとiOSの場合、これはPDFファイルを扱うためのAPIを含むQuartzフレームワークと、PDF表示用のグラフィックス描画コンテキストを提供するCore Graphicsフレームワークです。AppleはオリジナルのQuartzフレームワークの機能を分割し、Core Graphicsがほとんどの描画プリミティブとコンテキストを処理し、Quartzが画像、PDF操作、Quick Lookプレビュー機能を担当するようにしました。

プレビュー、印刷、表示

Appleのプレビューアプリと印刷システムは、PostScriptコードを含む.psファイル形式でPostScriptを直接開き、表示、印刷できましたが、macOS 14 Sonomaでこのサポートは終了しました。プレビューは数十年にわたりPDFファイルをサポートしてきました。

Macでも、テキストエディットアプリに.psファイルをドロップするだけで、生のPostScriptコンテンツを閲覧できます。テキストファイルとして開き、PostScriptを直接読むことができます。

Finder 内の PDF および PostScript ファイル。

Finder 内の PDF および PostScript ファイル。

最近のレーザー プリンターのほとんどは ROM に PostScript インタープリターを搭載していませんが、一部のコンシューマー レベルのレーザー プリンターには、プリンターのネイティブ レンダリングを使用して .ps ファイルを受信、デコード、印刷できる Brother の BR-Script などの PostScript エミュレーターが搭載されています。

HexFiendやHexEditなどのMac用バイナリエディタユーティリティを使えば、PDFファイルの内容を直接確認することができます。バイナリエディタはコードやバイナリファイルの内容を表示するために設計されていますが、ファイル形式が分かっていれば、あらゆる種類のファイルの内容を表示できます。

Hex Fiend で PDF コンテンツを表示します。

Hex Fiend で PDF コンテンツを表示します。

しかし、PDFファイルを含む多くのファイルでは、生のデータが人間が判読できない形式でエンコードまたは保存されている場合があります。そのため、16進エディタで表示されている内容を理解するには、ファイル形式の内部構造に精通している必要があります。

PDF ファイルの場合、通常はキー「%PDF」で始まり、「%EOF」で終わります。

PDFデバッガーの使用

ほとんどのPDFファイルは、階層的なツリー構造で構成されています。ツリー上の一部のノードは、親ノードをさらに詳細に記述する子ノードで構成され、他のノード(リーフノード)には、ページ数、種類、長さ、作成者の詳細など、ファイルに関する情報のみが含まれます。

PDFファイルは破損し、無効なツリーデータが含まれることがあります。多くの場合、PDFファイルは読み取れなくなります。PDFファイルが破損していると思われる場合、またはPDFのツリー情報を確認したい場合、簡単な方法があります。

ウクライナのYevhenii Hyzyla氏によるシンプルなウェブツール「PDF Debugger」を使えば、まさにそれが実現できます。使い方は簡単で、MacのFinderから任意のPDFファイルをページのドロップパネルにドラッグ&ドロップするだけで、ファイルのPDFツリー情報を読み取って表示してくれます。

PDF デバッガー ページに PDF をドロップすると、そのツリー情報が表示されます。

PDF デバッガー ページに PDF をドロップすると、そのツリー情報が表示されます。

PDF デバッガーでは PDF の内容全体は表示されませんが、16 進エディターやその他の生データ リーダー アプリを使用して表示できます。

他のユーティリティを使用すると、PDF を .ps ファイルに変換して、PostScript を直接読み取ることができます。

PDF デバッガーは、PDF ファイルの基本構造をすばやく簡単に検証する方法です。

Hyzyla 氏は、GitHub ページに、WebAssembly で記述された Google の高性能 PDFium ライブラリを使用する Node.js JavaScript エンジン用のラッパー ライブラリも公開しています。