自炊した検索可能なPDFファイルをGhostscriptで圧縮すると検索可能なPDFではなくなってしまう問題

どうも、Tです。

先日、自炊したPDFファイルを圧縮するスクリプトを作成した記事を書いたのですが、「検索可能なPDFではなくなる」という問題があったのですが、解決したので備忘録です。

自炊した書籍のPDFファイルをGhostscriptを使って自動で圧縮するbashスクリプトを作った話
どうも、Tです。 僕は本が大好きですが、多すぎて紙のまま保存できないので、自炊をしてPDFファイルで保存しています。 ...

スポンサーリンク
アドセンス1

前提

今回の事象は、下記の前提があります。

  • 自炊したオリジナルPDFファイルは検索可能なPDFとして作成されている
  • Ghostscript(gs)を利用してPDF圧縮した際に発生する

事象

左の画像が、自炊→OCR→検索可能なPDFファイルにして、保存した検索状況です。

右の画像が、gsでPDF圧縮を行った検索状況です。

PDF圧縮を行うと、「カーネル」という文字は見えているのに検索できなくなってしました。

原因

原因は、PDFのフォントが圧縮時に削除されているからでした。

対象のPDFファイルのファイル→プロパティから確認してみます。

フォントの数が減っていることが分かりました。圧縮後でCourierフォントが埋め込みサブセットになってしまっているのは・・・よくわかりませんでした。

なぜこうなるかというところが、公式リファレンスでありました。

https://www.ghostscript.com/doc/9.23/VectorDevices.htm#PDFWRITE

-dCompressFonts=booleanDefines whether pdfwrite will compress embedded fonts in the output. The default value is true; the false 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

gs(Ghostscript)オプション説明
-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フォントが埋め込まれるようになりました。

読む分に問題はなかったので放置ですが、下記の仕組みを使えば、圧縮時に操作できそうでした。

Ghostscript/Windows - TeX Wiki

日本語等のフォント (CJK font と呼ばれるもの) は,Ghostscript では CID font を用いることが基本的になっています。
これを他の CID font や TrueType font に代替させることを主な目的とした設定ファイルが cidfmap です。

ファイルサイズはどうなるか

-dCompressFonts=falseを使うとファイルサイズ大きくなるような注意書きがあったので念のため確認しました。

  • オリジナルファイル:310MB
  • PDF圧縮(-dCompressFonts=ture):20MB
  • PDF圧縮(-dCompressFonts=false):22MB

少々大きくはなりますが、許容範囲ですね。

まとめ

ちゃんと公式マニュアル読みましょうってことですね。そもそもPDFの構造をよく理解してなかったのも問題か・・・。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする