163

単純な好奇心から、最小の GIFを見てきましたが、可能な最小の有効な PDF ファイルは何ですか?

4

8 に答える 8

225

これは興味深い問題です。本でそれを取ると、これから始めることができます:

%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 バイトになりました。

また、仕様に「間接参照でなければならない」とあり、/Count が必要であり、ヘッダーが %PDF-1.0 である必要がある場合、彼らは緩い提案をしていることも判明しました。これは私が作成し、Acrobat X で開くことができる最小のものです。

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

70 バイト。

現在、私のエディターは Windows の改行規則を使用していますが、Acrobat は Windows、Mac、または Unix の規則を受け入れているため、16 進エディターを使用して \r\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 (FoxIt) に組み込まれている PDF 読み取り機能では、それを開くことができません。

PostScript として (HA! 私がそこで何をしたか見てください?)、Acrobat がファイルを「修復」することに同意すると、最大 3550 バイトに増加し、そのほとんどはオプションのメタデータですが、多くの明確な仕様違反が残されます。

于 2013-06-24T16:55:39.253 に答える
22

Hello World の例を開くことができませんでした。

テキストコンテンツを含む小さなファイルの場合:

%PDF-1.2 
9 0 obj
<<
>>
stream
BT/ 9 Tf(Test)' ET
endstream
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Contents 9 0 R
>>
endobj
5 0 obj
<<
/Kids [4 0 R ]
/Count 1
/Type /Pages
/MediaBox [ 0 0 99 9 ]
>>
endobj
3 0 obj
<<
/Pages 5 0 R
/Type /Catalog
>>
endobj
trailer
<<
/Root 3 0 R
>>
%%EOF
于 2015-08-21T14:02:05.550 に答える
8

「Hello World」を表示する最小のpdfを作成すると思いました。テキストは左下隅にあります。9 ポイントのフォントについては申し訳ありませんが、これより大きいと余分なバイトがかかります :)

Adobe Reader X の場合は 172 バイト (改行のみの改行で保存され、末尾の改行または null バイトがない場合):

%PDF-1.
1 0 obj<</Kids[<</Parent 1 0 R/Resources<<>>/Contents 2 0 R>>]>>endobj 2 0 obj<<>>stream
BT/ 9 Tf(Hello World)' ET
endstream
endobj trailer<</Root<</Pages 1 0 R>>>>

Chrome の組み込み PDF ビューアの場合は 120 バイト:

%PDF 1 0 obj<</Pages<</Kids[<</Contents<<>>stream
BT 9 Tf(Hello World)' ET endstream>>]>>>>endobj trailer<</Root 1 0 R>>

これを Chrome で簡単に確認するには、この URI をアドレス バーに貼り付けます (SO ではリンクできず、他のブラウザーではまったく機能しません)。

data:application/pdf,%25PDF%201%200%20obj%3C%3C%2FPages%3C%3C%2FKids%5B%3C%3C%2FContents%3C%3C%3E%3Estream%0ABT%209%20Tf(Hello%20World)'%20ET%20endstream%3E%3E%5D%3E%3E%3E%3Eendobj%20trailer%3C%3C%2FRoot%201%200%20R%3E%3E
于 2014-06-10T17:28:30.003 に答える