ttの日記: PDFの謎 1
さて、勤務先では文章基本フォーマットはword, excel, powerpointのどれか、あるいはpdfを使えということになっている。てなわけで、社内システムに文章を突っ込むときは TeX の出力を pdf に変換してから登録している。
さて、dviファイルをPDFに変えるには、いろいろ方法がある。
- dvipdf をつかう
- dvipdfm をつかう
- dvips したあとに adobe acrobat distiller などを使う
で、お金もかからない2を使うのが私の普段の方法なのだが、なぜか、2で作ったpdfファイルは社内システムに食わせると用紙のサイズがおかしくなり、文字の表示位置と用紙サイズが合わずにめちゃくちゃになってしまう。
1で作れば問題ないのだが、日本語フォントがビットマップになる(?)のか、やけに画面表示が汚くなり、その上PDFファイルのサイズがでかくなる。
3で作ればファイルサイズは小さく、表示もきれいで、もちろん社内システムとの連携も悪くない。が、お金がかかる。全作業がLinux上で終わらないのも面倒くさい。
このほか、dvips したあとに gs を使うってのもあるが、こいつは実質的に1と同じ画質になってしまう(少なくとも私の手元の環境にあるgsではそうだった)。
ということで、非常に困っていた。こまってるだけでは物事は改善しないのだが、忙しかったこともありとりあえず品質は二の次で1で問題を回避していた。
さてここ数日、集中力が皆無で本業の仕事をやる気が出ないのもあり、1と2のファイルを比較し、なぜ2では用紙サイズの解釈がうまくいかないのかを調べてみることにした。
こちらの用紙サイズに関する記述などを参考に、二つのファイルの記述の違いを調べていく。と、、、
「んー、"[" の前に空白がない?」
PDFファイルでは用紙サイズを「/MediaBox [ 0 0 595 842 ]」という風に指定するらしい。/MediaBoxってのが用紙サイズを指定するコマンド(?)で、配列型の引数をとる。で、[]で囲われた部分が「配列」らしい。
dvipdfとdvipdfmの出力結果では、この配列のスタートを表す「[」の前に、空白があるかないかという違いがあった。で、社内システムのPDFの解釈では、この[のまえに空白がないと正しく用紙サイズが認識されない。pdfファイルにemacsを使って空白を入れたら問題が解決したので確実である。
とりあえず問題の回避方法はわかったので、今後はdvipdfmを使うことにした。
しかし…これは社内システムがバグってるのだろうか。それとも、dvipdfmがバグってるんだろうか。教えてえらい人~、という気分である。
1. dvipdf をつかう (スコア:2, 参考になる)
ghostscriptの7.05あたりからこれは改善されたみたいです。
といってもdebianのgs-gnuパッケージしか使っていないので
なにか設定されているかもしれませんが。