iBooks Authorが出力するPDFの枠を消す


多分、iBooks Authorとしては、PDF出力はあくまで確認用として用いるべしといったところで、枠はそれを強調するための飾りなんだろう。

無料でこれほど使い易い(機能も適度に豊富な)出版ツールを他に知らないので、積極的に使いたい。そのためには、iBooksEPUBだけでなく、出版(印刷、配布)用のPDFファイルも出力できなければ、応用範囲が広がらない (会社でiBooks Authorロゴ入りのPDFファイルを提出することは、タダコピでコピーした裏に広告が入っている書類を提出することとあまり違いがない。つまり、体裁が悪い)。
そこで、iBooks Authorが出力するPDFファイルの枠を消すことにした。思いついた方法は2つある。

pdfcrop

PDFCropはPDFファイルの余白を判断して切り取る。TeX Liveに同梱されているので、大抵の人の環境には入っているだろう。

これにそのままiBooks Authorの出力PDFファイルを引数として渡すと、上、左右は問題なく余白が切り取られるが、下の「 iBooks Author」の部分が余白とみなされず切り取られない。そこで、目視で測ったピクセル値を切り取り枠下側に加えた。

$ time pdfcrop --margins "0 0 0 -55" ibooks_pdf.pdf ibooks_pdf_cropped.pdf
PDFCROP 1.32, 2011/08/10 - Copyright (c) 2002-2011 by Heiko Oberdiek.
==> 4 pages written on `ibooks_pdf_cropped.pdf'.

real    2m51.121s
user    2m43.072s
sys     0m0.714s
$ identify ibooks_pdf.pdf
ibooks_pdf.pdf[0] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.010u 0:00.009
ibooks_pdf.pdf[1] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.009
ibooks_pdf.pdf[2] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.009
ibooks_pdf.pdf[3] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.009

$ identify ibooks_pdf_cropped.pdf
ibooks_pdf_cropped.pdf[0] PDF 922x598 922x598+0+0 16-bit Bilevel DirectClass 69.4KB 0.000u 0:00.019
ibooks_pdf_cropped.pdf[1] PDF 922x598 922x598+0+0 16-bit Bilevel DirectClass 69.4KB 0.000u 0:00.019
ibooks_pdf_cropped.pdf[2] PDF 922x598 922x598+0+0 16-bit Bilevel DirectClass 69.4KB 0.000u 0:00.019
ibooks_pdf_cropped.pdf[3] PDF 922x598 922x598+0+0 16-bit Bilevel DirectClass 69.4KB 0.000u 0:00.019

問題なく余白が切り取られているが、4ページのPDFファイルの処理に2、3分かかっている。

元のPDFファイルにあったメタデータはpdfcropの処理の過程で全て上書きされ、また、PDFデータは画像形式に変換されるので、元のPDFファイルにあった文字情報が失われる。文字を選択、コピー出来ないPDFファイルを作りたいのであれば問題ないが、そうでない場合は使い勝手の悪いPDFファイルとなるので注意が必要だ。

PDF Hack

iBooks Authorが出力するPDFファイルには/MediaBox [0 0 1024 748]はあるが、その他の枠情報は無い。

シェルコマンドでCropBox情報を加えてみた。枠の大きさは、pdfcropが判断した余白情報から決定した。

$ time sed -e 's;/MediaBox;/CropBox [52 75 973 673] /MediaBox;g' ibooks_pdf.pdf > ibooks_pdf_cropped.pdf

real    0m0.004s
user    0m0.002s
sys     0m0.003s

pdfcropの時と同じ、4ページのPDFファイルを処理させてみたが、一瞬で終わってしまった。表示結果は、pdfcropを用いた場合とほぼ同じだった。

CropBox情報を加えたPDFは、プレビュー.appとGoogle Chromeで正常に見られることを確認した。ただ、一部のプログラムでは異常なPDFと判断されるようだ。

$ identify ibooks_pdf_cropped.pdf 
   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.

   **** This file had errors that were repaired or ignored.
   **** The file was produced by: 
   **** >>>> Mac OS X 10.7.2 Quartz PDFContext <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

ibooks_pdf_cropped.pdf[0] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.010u 0:00.019
ibooks_pdf_cropped.pdf[1] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.019
ibooks_pdf_cropped.pdf[2] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.009
ibooks_pdf_cropped.pdf[3] PDF 1024x748 1024x748+0+0 16-bit Bilevel DirectClass 95.8KB 0.000u 0:00.009

あくまで、PDFの表示枠情報を加えているだけなので、メタデータや文字情報はそのまま残っている。いざとなれば、CropBox情報を削除して元のPDFファイルに復元することも出来る。

pdfcropと比べ、処理が速く、使い易いPDFファイルが出力されることから、CropBox情報付加の方を今後採用することにする。

ついでに、これを簡単に実行するAppleScriptを書いた。

アプリケーションとして保存し、それにPDFファイルをドラッグアンドドロップすれば、PDFファイルと同じディレクトリにCropBox情報が付加されたPDFファイルが出力される(同時に複数ファイルが与えられた場合、それぞれのファイルについて処理を行う)。