PDFを印刷するときになるべく実際のサイズで印刷してもらうための設定
Rubyを使ってPDFを出力するライブラリにPrawnというのがあります。弊社のサービスHachikinもこのPrawnを利用してPDFを出力しようとしています。
Prawnを使ってPDFを作成している時に、クライアントアプリ(Adobe Reader や Macのプレビュー.app、Chromeからの印刷)が自動で印刷サイズを縮小している現象があることが分かりました。色々調べてみると、PDFを印刷する際に、なるべくサイズを縮小させないで印刷してもらう方法があったのでメモ程度に残しておきます。
まず、印刷するときの拡大・縮小に関する設定はPDFのViewerPreferencesのPrintScalingをNoneにすることで行うようです。これといったマニュアルっぽいのも見つからなかったので手探りな感じですが。
Prawnではまだ設定を行うことが出来ないようですが、Githubで議論されているっぽいので、そのうち対応されるのだと思います。
https://github.com/prawnpdf/prawn/pull/448
今回は暫定的に、関連するオブジェクトを探してきて、そこに無理やり設定することにしました。いま使おうとしているPrawnのバージョンはちょっと古いバージョンで0.12.0になります。この場合、以下のように最初に設定しておくといいかと思われます。(あくまで暫定です。すでにクラスの階層など最新バージョンと違っていたりしたので、バージョンをあげたりすると以下のようにアクセスできなくなる可能性もありますので)
Prawn::Document.generate(tmp.path, :page_size => 'A4') do |pdf|
pdf.state.store.root.data[:ViewerPreferences] = {:PrintScaling => :None}
# 以下略・・
end
この設定をしてPDFを出力すると、以下の様な記述がPDFファイルに追加されました。(Vim等で開いて見てください)
<< /Type /Catalog
/Pages 3 0 R
/ViewerPreferences << /PrintScaling /None
>>
WebアプリでPDFを出力する機能を作っているので、この設定を入れた上で、ChromeからPDFを表示してみます。そして、Chromeの印刷ダイアログを開いた時に、下記のように「ページサイズに合わせる」のチェックが外れていることがわかると思います。設定を入れるまでは、ここに必ずチェックが入ってしまい、思っていた様な出力となりませんでした。
Adobe Readerの場合は「実際のサイズ」にチェックが入ります。
普段印刷するときにはあまり気にしていなかったのですが、微調整をし始めるとPDF生成も難しい部分がありそうです。もっと良い改善方法もあるかもしれませんので、その時はまた報告しようかと思います。