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






![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


コメントする