【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

アーカイブ

JPEGアーカイブするのに無圧縮ZIPを使っていましたが(id:n7shi:20100923)、PDFの中にはJPEGがそのまま入っているため(id:n7shi:20110201)、PDFはZIPと同じようにコンテナとして扱えることに気付きました。

さっそく試そうと思い、以前id:m107さんに教えていただいたサイトを見返しました。

JPEGの埋め込み方は説明されていませんが、手元にあるPDFファイルなどを参考に補ってみました。最小構成の1ページでは以下のようになります。
※改行コードはCR+LFとしてオフセットを求めています。

%PDF-1.2

1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj

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

3 0 obj
<<
  /Type /Page /Parent 2 0 R /Contents 4 0 R
  /MediaBox [ 0 0 16 16 ]
  /Resources
  <<
    /ProcSet [ /PDF /ImageB /ImageC /ImageI ]
    /XObject << /Jpeg1 5 0 R >>
  >>
>>
endobj

4 0 obj
<< /Length 30 >>
stream
q 16 0 0 16 0 0 cm /Jpeg1 Do Q
endstream
endobj

5 0 obj
<<
  /Type /XObject /Subtype /Image /Name /Jpeg1
  /Filter /DCTDecode /BitsPerComponent 8 /ColorSpace /DeviceRGB
  /Width 16 /Height 16 /Length 631
>>
stream
※ここにJPEGファイルのバイナリをそのまま埋め込む
endstream
endobj

xref
0 6
0000000000 65535 f
0000000012 00000 n
0000000066 00000 n
0000000148 00000 n
0000000353 00000 n
0000000441 00000 n
trailer
<< /Root 1 0 R /Size 6 >>
startxref
1268
%%EOF