PDF について

PDF について
PDF は「Portable Document Format」の略です。

2020年現在では、PDF の基本バージョンとして、1.1 から 1.7 までが存在します。

元々は Adobe が独自に定義した規格でしたが、2008年には、国際標準化機構 (ISO) により、PDF 1.7 が ISO 32000-1 として標準規格化されました。

それ以降、Adobe 独自によるバージョンアップは、ベースとなる PDF 1.7 に対する拡張という形で行われています。
また、2017年には PDF 2.0 が制定されています。

PDF に関連した規格としては、他に PDF/X や、PDF/A などがあります。
これらは、PDF の指定バージョンをベースとして、一部の機能が制限されています。

PDF/X は印刷を目的としたもので、日本の印刷所においては、PDF/X での入稿を推奨している所が多くあります。
PDF/A は電子文書の長期保存を目的としたもので、主に欧州を中心に使われています。

フォーマットとしての違いはなく、基本的に通常の PDF と同じ仕様になりますが、一部で独自の値を追加したりする必要があります。

ここでは、PDF/X についても説明していきます。
バージョン
PDF を作成する際には、任意のバージョンを指定して使うことが出来ます。

バージョンによって使える機能が異なるため、使用したい機能に応じて、適切なものを使ってください。
(実際に PDF が読み込まれた時に、どのように処理されるかは、アプリケーションによって異なる場合があります)

PDF を読み込む側では、すべての PDF バージョンに対応しているとは限らないため、互換性の観点から考えると、古いバージョンを使った方が、より多くのアプリケーションで読み込めます。

各バージョンによる主な変更点は、以下のようになっています。

1.0初期バージョン
1.1暗号化
1.2zlib/deflate による圧縮。
Unicode 対応。
1.3CJK フォントの埋め込み
1.4透明の概念を追加。
JBIG2 画像圧縮。
OpenType フォント対応。
1.5JPEG2000 画像圧縮
1.63D アートワーク。
OpenType フォントの埋め込み
1.7(細かい変更)

基本的に PDF 1.2 以降を使った方が良いでしょう。
日本語フォントを埋め込むなら、最低でも PDF 1.3 が必要になります。
PDF の仕様書
PDF の仕様書は Adobe によって公開されています。
1.7 の場合は、以下の URL でダウンロードできます。

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf (ISO による定義)
https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf (Adobe による定義)

上記2つの内容はほぼ同じですが、上の方が新しいです。

古いバージョンのファイルもありますが、リンク先などが記載されていないので、以下のサイトを参考にしてください。
アメリカ議会図書館 (PDF family)

もしくは、InternetArchive の方で、Adobe の以前のページをご覧ください。
https://web.archive.org/web/20200917072832/https://www.adobe.com/devnet/pdf/pdf_reference_archive.html
PDF ファイルの概要
まずは、PDF ファイルがどのように構成されているかを説明します。

PDF の基本的な構文はテキストで表されますが、ファイル内には、バイナリデータをそのまま格納することもできます (テキストとバイナリの混合)。

ファイル内をすべてテキストのみで記述することもできますが、その場合はファイルサイズが増大するため、通常はバイナリデータも使います。

以下は、すべてテキストのみで記述した場合の PDF ファイルの中身です。
ページは1つのみで、左下に四角形を描画しています。
>> 01.pdf
(保存する場合は、右クリックで名前を付けて保存してください)

%PDF-1.3
1 0 obj
<< /Type /Catalog
   /Pages 2 0 R
>>
endobj

2 0 obj
<< /Type /Pages
   /Kids [ 3 0 R ]
   /Count 1
>>
endobj

3 0 obj
<< /Type /Page
   /Parent 2 0 R
   /MediaBox [ 0 0 612 792 ]
   /Contents 4 0 R
>>
endobj

4 0 obj
<< /Length 18 >>
stream
10 10 100 100 re
S
endstream
endobj

xref
0 5
0000000000 65535 f 
0000000009 00000 n 
0000000062 00000 n 
0000000128 00000 n 
0000000227 00000 n 

trailer
<< /Size 5
   /Root 1 0 R
>>
startxref
296
%%EOF

上記のテキストをコピー&ペーストして、テキストエディタで "〜.pdf" というファイル名で保存した場合、PDF として開けない場合があります。

ファイル内では、オブジェクトなどの位置を、バイト単位のオフセット位置で指定している部分があります。
上記では改行を 1 byte として扱っていますが、Windows などにおいて、改行が CR+LF の 2 byte として保存されてしまうと、オフセット位置がずれてしまうため、正しく開けなくなります。
PDF ファイルの構成
PDF ファイル内は、大きく分けると、
「ヘッダ」「ボディ」「クロスリファレンステーブル」「トレーラー」
の4つの部分で構成されています。

上記の例の場合、

"%PDF-1.3" が ヘッダ
それ以降から "xref" までが ボディ
"xref" から "trailer" までが クロスリファレンステーブル
"trailer" 以降が トレーラー となります。

なお、PDF ファイルは後から編集することができます。
その場合は、元の内容を保持したままで、ファイルの末尾に、新しいボディやクロスリファレンステーブル、トレーラーを追加記述することで、内容を更新させることができます。