PriMoreはVBScriptで動いていますが今まで難読化した上で公開しておりましたが、多忙につき今後もなかなかメンテナンス出来ないと思うので、ソースを公開します。
VBScriptですのでVBAをやったことが有る方であれば、書き換える事は
出来ると思いますので、自分の好みに書き換えて使って下さい。
(とは言ってもPostScriptとPDFMarkがどんなものか知らないと書き換えは難しいかも知れません)
■PriMore V4.22 (PrimoPDF V4.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV4.22.vbs.txt
■PriMore V0.85 (PrimoPDF V3.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV0.85.vbs.txt
※拡張子は.txtにしているのでDL後に.vbsに戻して下さい。
それなりに綺麗に作ったつもりですが、
構造自体が複雑なんで下で軽く解説します。
(すでに、自分自身が構造を忘れているんですがw)
なにかあればコメントして下さい。
■PrimoPDF自体の処理の流れについて
PrimoPDFは擬似的なプリンターであり
他の無料のPDF化ソフトと同様でスプールを
PS(PostScript)ファイルに変換してその後にPDF化します。
図にすると
spoolsv.exe==>primorun.exe==>primopdf.exe
└→spool┘ └→PS file┘ └→PDF file
・spoolsv.exe …プリントスプーラー
・primorun.exe …スプールからPSファイルを作成
・primopdf.exe …GUIで細かい設定を行ってPSファイルからPDFファイルを作成
です。
■PriMoreを導入した場合の流れについて
中間で作られるPSファイルを読み取り
日本語タイトルを取得しGUIでデフォルト表示するPDFのファイル名が
正しく日本語になるように設定します。
また、導入前は一度の印刷で必ず一つのPDFファイルですが、
複数回の印刷を一つのPDFファイルにまとめる事が
作成出来るようにしています。
図にすると
◇1度目の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)==>primore.vbs(2)
└→spool┘ └→PS file┘ └→PS file┘
◇2度目以降の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)
└→spool┘ └→PS file┘ └→PS file
◇まとめてPDF化
primore.vbs(2)==>primopdf.exe
└→PS file┘ └→PDF file
・primore.vbs(1)…一回目の場合、自己呼び出しして
primore.vbs(2)の終了を待たずにて終了
・primore.vbs(2)…GUIのprimopdf.exeを起動する。
です、複数回印刷でPSファイルが作られるように
プロセスの繋がりを切っています。これは、PrimoPDFは
印刷してGUIを表示してPDFが作成されるまで、次の印刷は待ち状態
になってしまう為です。
■PriMore V0.85 (PrimoPDF V3.x用)の日本語対応
PSファイルにはスプールから送られてくるタイトルが「%%Title」
に記載されているが、日本語が含まれると8進数又は16進数で
エンコードされていて、GUIのprimopdf.exeが「%%Title」をそのまま
表示する為、デフォルトのファイル名として日本語が表示されません。
PriMoreでは、「%%Title」を先に読み取ってデコードした上で
「%%Title」に日本語(S-JIS)で書き戻しています、これをprimopdf.exeが読み取る事で
ファイル名として日本語表示されるようにしています。
ただこれだけだと、PDF自体のタイトルは文字化けしたままなの
PSファイルにPDFMarkで日本語タイトルをPDFdocencodingで追記してます。
なお、PDF化の際には「%%Title」よりPDFMarkのタイトルが優先されます。
また、複数の印刷時のタイトルをしおりとしてPDFMarkで追記しています。
■PriMore V4.22 (PrimoPDF V4.x用)の日本語対応
PrimoPDF3.0と異なり、primopdf.exeが「%%Title」を読み取る際に
英字以外が含まれるとエラーになってしまうため、「%%Title」を
"hoge"と書き換えて起動したGUI画面をSendKeyとクリップボード経由で
書き換えて日本語表示されるようにしています。
(こんな方法しかないんです…)
VBScriptですのでVBAをやったことが有る方であれば、書き換える事は
出来ると思いますので、自分の好みに書き換えて使って下さい。
(とは言ってもPostScriptとPDFMarkがどんなものか知らないと書き換えは難しいかも知れません)
■PriMore V4.22 (PrimoPDF V4.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV4.22.vbs.txt
■PriMore V0.85 (PrimoPDF V3.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV0.85.vbs.txt
※拡張子は.txtにしているのでDL後に.vbsに戻して下さい。
それなりに綺麗に作ったつもりですが、
構造自体が複雑なんで下で軽く解説します。
(すでに、自分自身が構造を忘れているんですがw)
なにかあればコメントして下さい。
■PrimoPDF自体の処理の流れについて
PrimoPDFは擬似的なプリンターであり
他の無料のPDF化ソフトと同様でスプールを
PS(PostScript)ファイルに変換してその後にPDF化します。
図にすると
spoolsv.exe==>primorun.exe==>primopdf.exe
└→spool┘ └→PS file┘ └→PDF file
・spoolsv.exe …プリントスプーラー
・primorun.exe …スプールからPSファイルを作成
・primopdf.exe …GUIで細かい設定を行ってPSファイルからPDFファイルを作成
です。
■PriMoreを導入した場合の流れについて
中間で作られるPSファイルを読み取り
日本語タイトルを取得しGUIでデフォルト表示するPDFのファイル名が
正しく日本語になるように設定します。
また、導入前は一度の印刷で必ず一つのPDFファイルですが、
複数回の印刷を一つのPDFファイルにまとめる事が
作成出来るようにしています。
図にすると
◇1度目の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)==>primore.vbs(2)
└→spool┘ └→PS file┘ └→PS file┘
◇2度目以降の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)
└→spool┘ └→PS file┘ └→PS file
◇まとめてPDF化
primore.vbs(2)==>primopdf.exe
└→PS file┘ └→PDF file
・primore.vbs(1)…一回目の場合、自己呼び出しして
primore.vbs(2)の終了を待たずにて終了
・primore.vbs(2)…GUIのprimopdf.exeを起動する。
です、複数回印刷でPSファイルが作られるように
プロセスの繋がりを切っています。これは、PrimoPDFは
印刷してGUIを表示してPDFが作成されるまで、次の印刷は待ち状態
になってしまう為です。
■PriMore V0.85 (PrimoPDF V3.x用)の日本語対応
PSファイルにはスプールから送られてくるタイトルが「%%Title」
に記載されているが、日本語が含まれると8進数又は16進数で
エンコードされていて、GUIのprimopdf.exeが「%%Title」をそのまま
表示する為、デフォルトのファイル名として日本語が表示されません。
PriMoreでは、「%%Title」を先に読み取ってデコードした上で
「%%Title」に日本語(S-JIS)で書き戻しています、これをprimopdf.exeが読み取る事で
ファイル名として日本語表示されるようにしています。
ただこれだけだと、PDF自体のタイトルは文字化けしたままなの
PSファイルにPDFMarkで日本語タイトルをPDFdocencodingで追記してます。
なお、PDF化の際には「%%Title」よりPDFMarkのタイトルが優先されます。
また、複数の印刷時のタイトルをしおりとしてPDFMarkで追記しています。
■PriMore V4.22 (PrimoPDF V4.x用)の日本語対応
PrimoPDF3.0と異なり、primopdf.exeが「%%Title」を読み取る際に
英字以外が含まれるとエラーになってしまうため、「%%Title」を
"hoge"と書き換えて起動したGUI画面をSendKeyとクリップボード経由で
書き換えて日本語表示されるようにしています。
(こんな方法しかないんです…)
まさかプリモPDFでできるようになるなんて思っても居ませんでした。
本当にありがとうございます!!
PriMore V4.22 (PrimoPDF V4.x用)の日本語対応ですが、
ソースを色々いじらせて頂いた所、、
クリップボードを使用しない方法を発見しましたので報告させていただきます。
(既に気付いていて、問題があるためにしていないのでしたら、ごめんなさい。)
1、メインファイル(PriMoreMain.ps)内の「%%Title:」の行をコメントアウト
2、キー操作をさせている行(objShell.SendKeys)をコメントアウト
3、メインファイル名を、デコードしたタイトルとする。(「日本語名.sp」といった形に。)
これをV4.xのprimopdf.exeに渡すと、日本語名できちんと表示されるみたいです。
SPファイルに「%%Title:」が無い場合、SPファイル名がそのままファイル名として使用されるようでした。
私が使っている限りでは問題ないようです。
長文になってしまい、申し訳ありません。
コメントありがとうございます。
>クリップボードを使用しない方法を発見しましたので報告させていただきます。
クリップボード経由は自分でも気持ち悪いな。。
と思ってたので、目から鱗です。
v3用で仕組みを作ったので、メインファイル名を
変えようという発想にはなりませんでした。ありがとうございます。
近々にも頂いた情報でバージョンアップしたいと思います。
(まずは、ソースをみて思い出すところから始めないとw)
他にも思うところが有れば、ドンドンコメント頂ければ
嬉しいです。
作者様から更新をかけて頂けるなんて有り難いです。
(なにせ、ソースは、詳しく理解せずに部分的な理解で修正しているだけの状態なんで、変な所いじってそうで怖いんですよね・・・。動いてるから問題ないだろうと放置してますがwww)
本当に良いツール及びそのソースを公開して頂き、ありがとうございます。
今後もよろしくお願いします。微力ながら応援させて頂きます。