PDFの/MediaBoxを/ArtBoxに合わせるスクリプト
スポンサードリンク
DTP 駆け込み寺で「PDFの/MediaBoxを/ArtBoxに合わせたい」みたいなのを見かけたので、作ってみました。
Windows でテストしましたが、パスの通っているところに、pdftk をおいておけば Linux でもちゃんと動くはず。Mac OS はシラネ。
あと、単ページ PDF 限定のつもり。はたしてこれで用事が足りるのかしら。
pdftk については、再三書いているとおり、PDF HACKS で説明されています。pdftk で具具って見て、わけわかんねー場合に PDF HACKS を買うというのがいいのではないかと。って、1週間前も書きました。
(ここだけの話、PDF HACKS 微妙に売れています。)
#!/usr/bin/perl -w use strict; use File::Basename; use File::Temp qw/ tempfile tempdir /; # 正規表現パターン設定 my $Regex = <<'REGEX'; /ArtBox \[(.+?) (.+?) (.+?) (.+?)\] REGEX ; # コマンドライン引数分繰り返し foreach my $argv (@ARGV) { my ($mediabox, $trimbox, $bleedbox, $pdf, $dd, $a); (my $base, my $dir) = fileparse($argv, '\.[^\.]+$'); my $filename = $base . ".pdf"; my $newfilename = '#' . $filename; my $newpath = $dir . $newfilename; # pdftk を使って、伸長処理してパイプで取り込み if ($argv =~ m/.+ .+/) { # パスに空白含む(D&D) $dd = 1; open(IN, "pdftk $filename output - uncompress |") || die "can't open $filename \n"; } else { # パスに空白含む(D&D じゃない) $dd = 0; open(IN, "pdftk $argv output - uncompress |") || die "can't open $argv \n"; } binmode(IN); while() { # $pdf に 伸長した PDF の中身が入ります $pdf .= $_; } close (IN); # perl で検索処理しやすいよう $PDF をコピーして改行コード変更 # my $pdf_serach = $pdf; # (my $pdf_serach = $pdf) =~ tr/\r/\n/d; # パターンで検索ループ # 本来は、PDFリファレンス第2版 pp.68 のように、 # ページツリーをたどって、その部分の ページオブジェクト # の Contents の参照先のみを検索すればいいのだけれども、 # Perl で有効な PDF のパーサが分からないのでとりあえずこのママ。 # あっても使えないし。 while ($pdf =~ m/$Regex/gmo ) { $mediabox = "/MediaBox [$1 $2 $3 $4]"; last; } # 検索ループ終わり # 検索ループで見つかった場合、box 類を書き換える # 本来は、PDFリファレンス第2版 pp.68 のように、 # ページツリーをたどって、その部分の ページオブジェクト # の box 類を置換すればいいのだが、Perl で有効な # パーサが分からないのでとりあえずこのママ。 if ($mediabox) { $pdf =~ s#/MediaBox \[.+\]#$mediabox#; } # テンポラリファイルに置換結果書き込み # (pdftk がパイプで入力受け付けてくれないから) (my $fh, my $tempfilename) = tempfile(); binmode($fh); print $fh $pdf; # pdftk で正規化 if ($dd) { # D&D system("pdftk $tempfilename output $newfilename"); } else { # D&D じゃない system("pdftk $tempfilename output $newpath"); } }
トンボを検出するものよりは確実に動くみたいですが、無保証。しかも、仕組み的に時間がかかりすぎるのでお勧めできません。誰か手を入れてください。誰か助けて!
ARGV から展開するところは、MM 岩手さんの AddTrimBox [dtpwiki.jp] を参考にしました。
~~~
Trueflow だから、隠しオプションで /ArtBox に合わせるとかありそげ。ていうか、Trueflow で手でいじった PDF って使っちゃダメっていわれそげ。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/1148
コメントする