CIP3の中のJobNameをCIP3のファイルネームに置換するスクリプトを作ったがそもそもスクリプトで変えていいかどうか分からない
スポンサードリンク
印刷屋さんでは、インキ壺情報を作り出すために必要な PPF ファイルというものを取り扱わなくてはいけない場合があります。
ところが、うちの場合、日本製の PPF 生成ソフトが悪いのだか、ドイツ製の PPF 受け取りソフトが悪いのだかよく分かりませんが、PPF ファイル内の
/CIP3AdmJobName (ほげほげ.PPF) def
となっているところ、ほげほげ.PPF のままだと、PPF を受け取る側が表示してくれません。
問題点としては、生成側が SJIS でファイル名を書き込んでいること(ちゃんと PostScriptエンコーディングしろっちゅーの)、受け取り側が SJIS のジョブ名を処理できないこと(日本に持ってくるなら右ハンドルに付け替えろっちゅーの)、双方に原因がありそうです。
というわけで、現在のPPFのファイル名で /CIP3AdmJobName を付け直す Perl スクリプトを作りましたのでご査収ください。無保証、SJIS。今回に限っては、Mac OS X、Linux(Fedora Core 3) で動くことは確認しました。ただしコンソールではバケバケ。
#!/usr/bin/perl -w # Filename: PPFrename.pl # ActivePerl 5.8.6 (Win32) # Mac OS X 10.3.9 # Fedora Core 3 (Linux) で確認したよ。 # ただしSJIS記述なのでコンソール化けるかも。 # Usage: ドラドロしてください。 # (要ドラドロできるようになるソフト) # もしくはコマンドライン # C:\> perl PPFrename.pl 20050629ほげ.ppf use strict; use File::Basename; use encoding "cp932", Filter => 1; # 正規表現パターン設定 my $Regex = <<'REGEX'; /CIP3AdmJobName \((.+)\) def REGEX # コマンドライン引数分繰り返し foreach my $argv (@ARGV) { my ( $cip3jobname, $ppf ); my $fullpath = $argv; ( my $base, my $dir ) = fileparse( $fullpath, '\.[^\.]+$' ); ( my $filename = $base . ".ppf" ) =~ s/[^\w-\.]//g; my $newpath = $dir . '#' . $filename; print "ppf 読み込み中...\n"; open( IN, $fullpath ) || die "can't open $fullpath \n"; binmode(IN); read IN, $ppf, -s $fullpath; close(IN); # パターンで検索ループ print "検索開始...\n"; while ( $ppf =~ m/$Regex/mo ) { $cip3jobname = $filename; print "発見\n"; last; } # 検索ループ終わり # 検索ループで見つかった場合、/CIP3AdmJobName を書き換える。 if ($cip3jobname) { $ppf =~ s#/CIP3AdmJobName \((.+)\) def#/CIP3AdmJobName ($cip3jobname) def#; } # 置換結果書き込み print "処理用ppf書き込み中...\n"; open FH, ">$newpath"; binmode(FH); print FH $ppf; close FH; print "正規化ppf書き込み中...\n"; }
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/1181
コメントする