どうも、Tです。
先日、自炊したPDFファイルを圧縮するスクリプトを作成した記事を書いたのですが、「検索可能なPDFではなくなる」という問題があったのですが、解決したので備忘録です。
目次
前提
今回の事象は、下記の前提があります。
- 自炊したオリジナルPDFファイルは検索可能なPDFとして作成されている
- Ghostscript(gs)を利用してPDF圧縮した際に発生する
事象
左の画像が、自炊→OCR→検索可能なPDFファイルにして、保存した検索状況です。
右の画像が、gsでPDF圧縮を行った検索状況です。
PDF圧縮を行うと、「カーネル」という文字は見えているのに検索できなくなってしました。
原因
原因は、PDFのフォントが圧縮時に削除されているからでした。
対象のPDFファイルのファイル→プロパティから確認してみます。
フォントの数が減っていることが分かりました。圧縮後でCourierフォントが埋め込みサブセットになってしまっているのは・・・よくわかりませんでした。
なぜこうなるかというところが、公式リファレンスでありました。
-dCompressFonts=
booleanDefines whetherpdfwrite
will compress embedded fonts in the output. The default value istrue
; thefalse
setting is intended only for debugging as it will result in larger output.
-dCompressFontsのデフォルト値がTrueになっているため、削除されてるっぽいです。説明のembedded fontsを埋め込みフォントと解釈していて不要なオプションを思い込んでいました。
ちなみに、「false設定は出力サイズが大きくなるためデバッグのみを目的としている」とありましたが、試してみたところ問題になるほどの大きさではなかったので、こちらのオプションで解決していきます。
解決方法
-dCompressFontsオプションを指定する
gsコマンドのオプションに -dCompressFonts=falseを付けてください。
PDF圧縮後に検索可能なPDFにならなくコマンド( -dCompressFonts=falseオプションなし)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -sOutputFile=output.pdf input.pdf
PDF圧縮後にも検索可能なPDFになるコマンド( -dCompressFonts=falseオプションあり)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompressFonts=false -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -sOutputFile=output.pdf input.pdf
-dNOPAUSE:入力ファイルを1つ処理完了したら、次の入力ファイルを処理する
-dBATCH:変換処理が完了したらgsを終了する
-sDEVICE=pdfwrite:ファイルの出力方式を指定。PDFファイルに変換を指定している。
-dCompressFonts:フォント削除の有無を指定している。
-dCompatibilityLevel=1.4:PDFバージョンを指定。ここでは1.4を指定している。
-dPDFSETTINGS=/ebook:出力用途(品質)を指定。ここではebook(電子図書)を指定している。
-sOutputFile:変換後の出力先パス、ファイル名を指定。
検索できるか確かめる
gsで圧縮したPDFファイルでも検索が使えるようになりました。
左の画像が、自炊→OCR→検索可能なPDFファイルにして、保存した検索状況です。
右の画像が、gsで-dCompressFonts=falseを使ったPDF圧縮を行った検索状況です。
フォントの埋め込みはどうなるか
ちゃんと5つのフォントがありました。ちなみにフォントがMSMinchoからDroidDsansFallback(埋め込みサブセット)に置き換えられています。
このあたりの処理の仕組みは調べてませんが、見た目崩れていないのとAdobeの編集モードでは、MS Minchoになり、編集モードを終えるとMSMinchoフォントが埋め込まれるようになりました。
読む分に問題はなかったので放置ですが、下記の仕組みを使えば、圧縮時に操作できそうでした。
日本語等のフォント (CJK font と呼ばれるもの) は,Ghostscript では CID font を用いることが基本的になっています。
これを他の CID font や TrueType font に代替させることを主な目的とした設定ファイルが cidfmap です。
ファイルサイズはどうなるか
-dCompressFonts=falseを使うとファイルサイズ大きくなるような注意書きがあったので念のため確認しました。
- オリジナルファイル:310MB
- PDF圧縮(-dCompressFonts=ture):20MB
- PDF圧縮(-dCompressFonts=false):22MB
少々大きくはなりますが、許容範囲ですね。
まとめ
ちゃんと公式マニュアル読みましょうってことですね。そもそもPDFの構造をよく理解してなかったのも問題か・・・。