2013-07 << 2013-08 >> 2013-09

2013-08-17 (土)

PDFの勉強のため内部のテキストを抜き出すプログラム書いたりする.

PDF内のテキストは複雑なので,あまり扱いたくなかったのだけど,そろそろ,自炊本リーダ(仮)でテキスト表示したい.既存のPDFライブラリ使えば良いのだけど.

AdobeのPDFの仕様書と,実際のPDFを見比べながらいろいろ.

*PDF内のテキスト

PDF内のテキストデータは

(Hello)

とか

<037003b103ab03b103ab0c880358>

のような感じに入っています.(ほとんどの場合)英数字はそのまま入ってますが,日本語は謎の16進数が並んでいます.

Font

PageオブジェクトのResources下に,FontというDictionaryがある.そのなかにF1,F2,F3…という名前でフォント情報が列挙されている.

PDFの文字列は,エンコーディングの情報もFontに入っています.なのでFontをどうにかしないと,文字列を取得することすらできません.UTF-8とかなら良いのだけど,大抵はフォントのCIDが書かれています.

Font/Encoding

日本語のPDFでよく見るのは下の2つ.

  • Identity-H CID (縦書は-V)
  • 90ms-RKSJ-H ShiftJIS (縦書は-V)

Font/DescendantFonts/CIDSystemInfo

Registry, Ordering, Supplementが入っている.

例えば,

  • Registry: Adobe
  • Ordering: Japan1
  • Supplement: 2

Orderingごとに,どのCIDがどの文字に対応するかのマッピングはAdobeが公開している.

ToUnicode

EncodingがIdentityのとき,CIDとUnicodeのマッピングが書かれている.中身はたまに見かけるCMapファイルそのままっぽい.あまり見かけない.