PDFのページサイズとかCreator、Producer別にフォルダを作ってより分けるスクリプト(未完成、キケン)
スポンサードリンク
PDF ワークフローとかを1年くらい前真面目に研究したところ、PDF ワークフローに必要なツールがまるでないことに気付きました。というわけで、PDF ワークフローなんてまともにできるわけねーと適当にレポート出しておいて、FACILIS X-Plate PDF でお茶を濁していたのですが、そんなわけにはいかなくなりました。
何が問題かって、ページ物の単ページ PDF を面付けするとき、それらがはたしてすべて同じ大きさになっているかどうか、調べるツールがねえじゃん、ていうことです。やり方にもよりますが、大きさ依存で基準点を取ると、変な大きさの PDF が混ざっているとアウトだったりセーフだったりします。
というわけで、ページサイズによって単ページ PDF をより分ける仕組みを作らなければならなくなりました。
~~~
例えば、下の図のような PDF 群を、ページサイズによってより分けるにはどうすればいいのでしょうか。
▲いちいち開かなくてもページサイズが分かればなあ。
というわけで、以下のようなスクリプトを作りましたので、ご査収ください。Win32 ActivePerl 用、UTF-8 で。ちなみにバグ付きなので、安易に使って PDF がなくなったり、変なフォルダを勝手に掘られたりしても知りません。当方で実際に起きているので。あと、今回のやつは、Xpdf を使います。Xpdf については、
にてほとんど触れていないような状態で触れています。Xpdf といえば、Namazu 検索サーバを立てた人ならおなじみっぽいですが。
#!/usr/bin/perl -w # Filename: PDFclassi.pl # ActivePerl 5.8.6 (Win32) で確認したよ。 # Usage: ドラドロしてください。 # (要ドラドロできるようになるソフト) # もしくはコマンドライン # C:\> perl PPFclass.pl 20050701ほげ.pdf # # オプションで指定できるとカッコイいけどめんどくさそうなので、 # じか指定です。分類したい Key を $key に設定してください。 # # [key] [凡例] # Title ill8-offset.ai # Creator Adobe Illustrator 8.0 # Producer Adobe PDF Library 4.0 # CreationDate 05/21/05 13:25:45 # ModDate 06/21/05 13:25:46 # Tagged no # Pages 1 # Encrypted no # Page size 595 x 842 pts (A4) # MediaBox 0.00 0.00 595.00 842.00 # CropBox 0.00 0.00 595.00 842.00 # BleedBox 0.00 0.00 595.00 842.00 # TrimBox 0.00 0.00 595.00 842.00 # ArtBox 0.00 0.00 595.00 842.00 # File size 2163 bytes # Optimized no # PDF version 1.3 # # 【バグ情報】 # 現時点で、0x5C 問題があるので、 #「表」「ソ」「十」など使っているとダメ。 # ファイル名が変更されてしまったり、 # 行方不明になったり。マジヤバいから。 # Windows 以外 ならいいカモ。 use strict; use File::Basename; use File::Copy; use utf8; #use Encode; # key はここでセット。 my $key = 'Page size'; # ARGVが有るだけループ回す foreach my $argv (@ARGV) { my $fullpath = $argv; # ( my $filename, my $dir ) # = fileparse( Encode::decode('cp932',$fullpath)); ( my $filename, my $dir ) = fileparse($fullpath); # $dir = Encode::encode('cp932', $dir); # $filename = Encode::encode('cp932', $filename); my %property; my @data = `"C:\\Program Files\\Xpdf\\pdfinfo" -box "$fullpath"`; foreach (@data) { ( my $key, my $val ) = split(/: +/); chomp $val; $property{$key} = $val; } # 特定のキーの値と同じ名前のディレクトリを作って、 # そこに移動させる。 ( my $newdir = $property{$key} ) =~ s/ //g; $newdir =~ s/[^\w-\.\(\)]//g; $newdir = $dir . "\\" . $newdir; mkdir $newdir or die unless ( -e $newdir ); move $fullpath, $newdir or die $!; }
で、実行すると、こんな感じでフォルダごとに分類がされます。
▲ページサイズ別
▲Producer 別
~~~
Adobe Bridge って、こういう分類ってできるんでしょうか。これができないとなると、僕の認識は、アドビの人も重い点は全くアグリーですと認めている○○○ソフトとなってしまうんですが。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/1184
コメントする