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ファイルそのままっぽい.あまり見かけない.