綾小路龍之介の素人思考

[pdf] pdf の stream の抽出と変換

pdfimages を使って抽出した画像を png にしたら元の pdf ファイルよりもファイルサイズが大きくなった。原因を調べたらどうやら pdf の stream に対するデコードには DCTDecode FlateDecode がありそれぞれ、jpeg と png の画像ファイルに対して使われることが多いようだ。

元 pdf のエンコード種類を調べると、/FlateDecode /DCTDecode の両方が指定されている。

$ grep Decode --binary-files=text src.pdf
/Filter [ /FlateDecode /DCTDecode ] /Length 82761 >>
<< /Filter /FlateDecode /Length 47 >>

一旦 pdftk で非圧縮。

$ pdftk src.pdf output dst.pdf uncompress

再度調べると、/DCTDecode だけになった。jpegで圧縮されているようだ。

$ grep Decode --binary-files=text dst.pdf
<</ColorSpace/DeviceRGB/Subtype/Image/Filter[/DCTDecode]/Length 151441/Width 1664/Type/XObject/Height 2352/BitsPerComponent 8>>stream

pdfimages で圧縮前後の pdf に対して画像を抽出し、両者の画像を比較。両者は一致。

$ pdfimages src.pdf src
$ pdfimages dst.pdf dst
$ diff src-000.ppm dst-000.ppm

convert で圧縮。ファイルサイズを比較すると非圧縮 pdf とそれなりにコンパラ。

$ convert src-000.ppm src-000.png
$ convert src-000.ppm src-000.jpeg
$ ls -lah dst.pdf src* 
-rw-r--r-- 1 **** **** 149K Feb 24 04:40 dst.pdf
-rw-r--r-- 1 **** **** 124K Feb 24 05:16 src-000.jpeg
-rw-r--r-- 1 **** **** 424K Feb 24 05:26 src-000.png
-rw-r--r-- 1 **** ****  12M Feb 24 03:51 src-000.ppm
-rw-r--r-- 1 **** ****  82K Feb 19 15:58 src.pdf

リファレンス

  1. pdf DCTDecode FlateDecode - Google 検索
  2. PDF内の画像フォーマット - 色々日記(ざ・めも)
  3. Portable Document Format - Wikipedia, the free encyclopedia
  4. PDF by Hand - Kobu.Com
  5. LAB 69: Analyzing malicious PDF
  6. Twitter / PCMAPPING: 画像ファイル保存で、拡張子.pdf 指定で、 PDFファイル ...
  7. adobe photoshop - Check image compression used in PDF document? - Graphic Design Beta - Stack Exchange

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-07-04T05:12:13+09:00
  2. Modified: 2010-07-04T05:12:13+09:00
  3. Generated: 2017-04-29T23:09:20+09:00