PDF 内部構造
概要
PDFは旧Adobe Systems(現Adobe)が策定した文書ファイル形式で、誕生当初(1993年頃)は、その中身は謎となっていたファイル形式です。米国税務署が文書形式を採用したのを機会に2001年から2008年にかけて標準化機構(ISO)が仕様を策定し、2008年にはPDF1.7が公開されています。いつ頃、仕様が公開されたのかは知りませんが、2022年を過ぎた現在では、その仕様に基づいたPDFが広く使われるようになっている文書ファイル形式です。
2017年にPDF2.0がISOによって策定されていますが、こちらは250ドル支払わないと中身を見る事はできません。https://www.pdfa-inc.org/cart/?add-to-cart=593から購入できます。2.0は知ることができないので、諦めましょう。しかし1.7もまだまだ生き残るので、使えるはずですし、1.7を知っておけば2.0の技術を知るキッカケになると思います。署名や暗号化関連の技術が大きく変わっているそうですので、そのあたりの技術を多用するようであれば、2.0を習得した方がいいので、思い切って購入されると良いでしょう。2.0を自由自在にあやつるようなそういう人は事業を、おこすくらいの事だと思うので250ドルは安い買い物でしょう。ここでは2.0には触れません。1.7ベースで作ったものを2.0に変更して読み込めるかを確認して問題無ければ、2.0互換の技術だけを使っていることになるので、編み出した文書生成手法は機能限定版ではあるものの2.0対応を名乗ってもいいと思う。事業をおこすとかなら、ちゃんと仕様書確認した方がいいのだろうけどね。業務用だと、ここにあるような情報程度ではきっとうまくいかなくなると思います。印刷業界ではPDFの様々なバージョンと標準規格と細部にわたる設定がすべて準拠しているかで仕上がりが変わります。
2.0の話はこのくらいにしておきましょう。
PDFファイルの中身はバイナリですが、圧縮された情報を展開するとテキスト形式で記述できるページ記述言語(PDL:Page Description Language)というものになっています。PDLは様々な試み(PostScript(Adobe), Pages(IBM), LIPS(Canon), PCL(Hewlett-Packard), ART(Fuji Film))がありますが、PDFはもっとも成功した言語だと言えると思います。
ここでは公開された仕様書に基づいて中身がどうなっているのかを記録します。中身が分かったところで、バイナリ形式にするのは面倒だし、覚えても意味ないんじゃない?今はオープンソースもあるし、それの仕様に基づいてライブラリに情報を渡してPDFを吐き出せばいいじゃないとも言えます。ですが、よく使う文書の中身が公開されているなら、それを理解しておくのもよいものです。いざというときには自分でPDF文書を構成することもできるという。素晴らしい。自分は圧縮しなければならないというところが引っ掛かっていましたが、実は圧縮されていなくても、PDFのページ記述言語の仕様にそったテキストが作れれば、PDFは読み取ってくれます。一つ、無理があるところは、文字数のバイト長、PDFを構成するオブジェクトという単位の情報の塊がファイル内のどこにあるかファイル先頭からのオフセットアドレス値をトレーラと呼ばれる部分に埋め込むことが必要となるのですが、ものすごく面倒です。でもこの算出をしてくれるフリーのコマンドラインプログラムPDFtk(https://www.pdflabs.com/tools/pdftk-server/)があるので、最初はこれを使えば勉強もしやすく、簡単に言えば、HTMLくらい簡単なものに感じることができます。PDFtkのコマンドラインはPDFtk Serverというプログラムに含まれるようです。いづれにしても無料です。これとは別にPDFtkのUIが付いたPDFtk Free版とPDFtkPro版がありますが、使いやすいですが、すべてができるわけではないです。使いたい人は使ってみるのもいいと思います。
PDFtkをしっていれば、もっと勉強する人いたんじゃねと思うところです。標準化されてるんだからまさにHTMLやCSSと変わらない言語です。もっとPDFは使いやすくなっていたんじゃないか?そう思います。いまからでも遅くないPDFを理解してPDFを越えよ!情報戦士たち。そう思ったりします。おまえがやれよ的なとこもありますが。PDFを最大限活用する一歩になると思います。少しづつでもいいので勉強しましょかね。
仕様書は以下にありますが、ちょこちょこ移動するのが好きみたいで、すぐデッドになります。調べる時は specification PDF で調べるといいですね。specification は仕様っていう意味だそうです。
https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf
https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/pdf/PDF32000_2008.pdf
PDFの仕様を理解することでより早く開く文書、より早く閲覧できる文書を作ることもできるかもしれないし、あるいは同じ文書でもより早く閲覧できるようなビューワやエディタをこさえることもできるかもしれないし、出来ないかもしれない。
説明
PDF 内部構造 構造の概念 簡単な説明
PDF 内部構造 基本とファイル構造キー
PDF 内部構造 グラフィックス
PDF 内部構造 テキスト