1. ホーム
  2. pdf

[解決済み] 有効なPDFの最小値は?

2022-04-25 11:26:28

質問

単純な好奇心で 最小のGIF 有効なPDFファイルの最小値は?

解決方法は?

これは面白い問題ですね。 杓子定規に考えれば、まずはこんなところから始めてみてはいかがでしょうか。

%PDF-1.0
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/MediaBox[0 0 3 3]>>endobj
xref
0 4
0000000000 65535 f
0000000010 00000 n
0000000053 00000 n
0000000102 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
149
%EOF

は、291バイトのPDFの喜びです。 Acrobatはそれを開きますが、多少文句を言います。 その中に1ページがあり、それは3/72" の正方形で、仕様で許される最小値です。

しかし、Acrobat Xはもう相互参照表を気にすることもないので、それを取り出せばいいのです。

%PDF-1.0
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/MediaBox[0 0 3 3]>>endobj
trailer<</Size 4/Root 1 0 R>>

Acrobatは文句を言いつつも、それを開く。 これで178バイトになった。 トレーラーにある/Sizeは必要ないことが判明。 これで172バイトになりました。

%PDF-1.0
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/MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>

辞書の中にある厄介な/Type要素は必要ないことがわかりました。

%PDF-1.0
1 0 obj<</Pages 2 0 R>>endobj 2 0 obj<</Kids[3 0 R]/Count 1>>endobj 3 0 obj<</MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>

これで138バイトになりました。

また、仕様書に "shall be an indirect reference" や /Count が必要で、ヘッダーが "must" be %PDF-1.0 である場合、彼らは緩い提案を行っていることがわかりました。 これは、私が作ることができ、Acrobat Xで開くことができる最小のものです。

%PDF-1.
trailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>

70バイトです。

さて、私のエディターは Windows の改行規則を使っていますが、Acrobat は Windows、Mac、Unix の規則を受け入れるので、Hex エディターを使って、 \n を \r に置き換え、最後の改行を完全に削除し、67 バイトにしました。

25 50 44 46 2D 31 2E 0D 74 72 61 69 6C 65 72 3C 
3C 2F 52 6F 6F 74 3C 3C 2F 50 61 67 65 73 3C 3C 
2F 4B 69 64 73 5B 3C 3C 2F 4D 65 64 69 61 42 6F 
78 5B 30 20 30 20 33 20 33 5D 3E 3E 5D 3E 3E 3E 
3E 3E 3E 

最後の末尾の辞書(>>)を外してみたが、Acrobatにはそれがない。 Google Chromeに内蔵されているPDF読み上げソフト(FoxIt)でも開けない。

PostScriptとして(HA!私が何をしたかわかりますか?)、もしあなたがAcrobat "repairing"に同意すれば、ファイルは3550バイトに増えますが、そのほとんどは任意のメタデータで、明らかに仕様違反のものが多数残されています。