Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2015-07-17

BoundingBox がとにかくややこしい話(2)

昨日の続き。

3. pdfinfo の独自改変版の仕様を確認する

昨日、Xpdf や Poppler の本家版 pdfinfo は「PDF の仕様書通り /MediaBox をはみ出す Box はクリップする」という仕様であることを確認したことを doraTeX さんにお知らせしたところ、昨年の Advent Calendar で公開された extractbb を模倣する改変を施した pdfinfo がさらに extractbb に近づくように改変された。本記事では以降、これを仮に pdfinfo-extractbb と呼ぶことにして使ってみる。

pdfinfo-extractbb は、2014/12/03 リリース版では本家 pdfinfo に即したクリップが効いていたのだが、2015/07/16 リリース版では「クリップ無効と有効の両方を返す」ようになった。したがって、pdfinfo-extractbb と pdfinfo の -box オプションの違いは

  • その ナントカBox が /MediaBox をはみ出していた場合は、クリップした値とクリップしない値の両方を表示する
  • その ナントカBox の値が暗に決められたものならば [Implicit] と表示する
  • その ナントカBox の値が dvipdfmx によって採用されるものならば [dvipdfmx BB] と表示する

といえる。昨日作った PDF を調べると、出力は以下のとおり(一部抜粋)。

 $ pdfinfo-extractbb test-1.pdf
------------------------------------------------------------------------
Page    1 MediaBox:   100.00   100.00  1100.00  1100.00
Page    1 CropBox:    403.00   403.00  1403.00  1403.00   [dvipdfmx BB]
 *clipped CropBox:    403.00   403.00  1100.00  1100.00
Page    1 BleedBox:   302.00   302.00  1302.00  1302.00
 *clipped BleedBox:   302.00   302.00  1100.00  1100.00
Page    1 TrimBox:    504.00   504.00  1504.00  1504.00
 *clipped TrimBox:    504.00   504.00  1100.00  1100.00
Page    1 ArtBox:     201.00   201.00  1201.00  1201.00
 *clipped ArtBox:     201.00   201.00  1100.00  1100.00
------------------------------------------------------------------------
 $ pdfinfo-extractbb test-2.pdf
------------------------------------------------------------------------
Page    1 MediaBox:   504.00   504.00  1504.00  1504.00
Page    1 CropBox:    201.00   201.00  1201.00  1201.00   [dvipdfmx BB]
 *clipped CropBox:    504.00   504.00  1201.00  1201.00
Page    1 BleedBox:   302.00   302.00  1302.00  1302.00
 *clipped BleedBox:   504.00   504.00  1302.00  1302.00
Page    1 TrimBox:    100.00   100.00  1100.00  1100.00
 *clipped TrimBox:    504.00   504.00  1100.00  1100.00
Page    1 ArtBox:     403.00   403.00  1403.00  1403.00
 *clipped ArtBox:     504.00   504.00  1403.00  1403.00
------------------------------------------------------------------------

これで、pdfinfo と extractbb が返す ナントカBox の値の違いが明らかになると同時に、extractbb の独自ルールが本来の PDF の仕様と齟齬を来していることが一目瞭然である。

4. gs の bbox デバイスの仕様を確認する(その1)

実は昨日用意した test-1.pdf と test-2.pdf にはもともと図が描かれている。この図は 1 から 3 ではどうでもよいことなので触れてこなかったが、4 で扱う gs の bbox デバイスは余白を無視するので、その図の存在およびその位置が重要になる。実際に僕の GitHub に置いてある PDF を使って、今までの ナントカBox と値が異なることを確認してほしい(面倒くさいので test-1.pdf の結果だけ示す)。先日の説明書読解と矛盾しないはずだ。

 $ gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox test-1.pdf
%%BoundingBox: 302 393 566 564
%%HiResBoundingBox: 302.993991 393.577441 565.847983 563.077530
 $ gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox -dUseCropBox test-1.pdf
%%BoundingBox: 0 90 263 261
%%HiResBoundingBox: 0.000000 90.577474 262.853992 260.077562
 $ gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox -dUseBleedBox test-1.pdf
%%BoundingBox: 100 191 364 362
%%HiResBoundingBox: 100.997997 191.577510 363.851989 361.077598
 $ gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox -dUseTrimBox test-1.pdf
%%BoundingBox: 0 0 162 160
%%HiResBoundingBox: 0.000000 0.000000 161.855995 159.086597
 $ gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox -dUseArtBox test-1.pdf
%%BoundingBox: 201 292 465 463
%%HiResBoundingBox: 201.995994 292.577475 464.849986 462.077564

指定する ナントカBox の種類によって返ってくる座標が異なる。すなわち gs の bbox デバイスは指定された Box に対する相対座標を返すことが一目瞭然である(無指定なら /MediaBox が採用される)。なお、一部(今回の場合 /CropBox の左端および /TrimBox の左端と下端)が0になっているが、これは /CropBox にちょうど触れるあたり、かつ /TrimBox をはみ出す部分にまたがって描画したためである。このことから、gs の bbox デバイスはページサイズを指定された以上、その外側は検知しないといえる。これらの -dUse****Box オプションがいつから存在するのかは、次回調べてみる。

追加 (2015-07-27) :ここまでの実験では CropBox をはみ出さない図だけを使ったが、CropBox をはみ出す図についても調べる必要があった… というわけで後日もう一度

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証