2009年02月20日

PrimoPDFで日本語ファイル名

印刷するような手軽さでPDFを作成できるPrimoPDFですが、このソフトは元々海外製なので、日本語ファイル名が付けられたファイルをPDF化しようとすると取り扱えずにエラーダイアログが表示されてしまいます。

まぁ、それを「OK」したあとに手動でファイル名を設定すればいいだけの話なのですが、このような面倒な事をしないでも、自動で「元のファイル名.pdf」にしてくれるアドオンが現在下記のサイトで公開中です。

こちらのアドオンはダイアログを操作する仕組み上、ウィルス対策ソフトにウィルスと間違いられやすいため一時期公開を停止されていましたが、現在はスクリプトをエンコーディングしてウィルス検索ソフトが検索できないようにして対応しているようです。
(って、その手法だといずれまたウィルス対策ソフトに捕まるような気もしますが(^^;)

また、PDF化するときにPrimoPDFに渡されるデータを横取りして、ファイル名(と言うより印刷タイトル)を解析しているようなのですが、IEの場合はこのタイトルにURLが渡されるので、PrimoPDFに直接送った場合は、必ず「利用できない半角文字が入っている」とのエラーになって、その後「http___example.com_index.pdf」と言った分かり難い名前が入力されてしまいます。

しかし、PriMoreを利用するとURLからファイル名に相当する部分だけを抜き出してくれるので、上記のようなケースでは「index.pdf」と言ったシンプルな名前を入力してくれます。

ただし、こちらは万能ではないようで「http://example.com/?123456」と言うURLの場合は、ファイル名が「?123456.pdf」になってしまい、「?」がファイル名として利用できない文字のため、そのまま出力しようとするとエラーになってしまうようです。

「\ ? : , ; * " < > |」と言ったファイル名として利用できない文字は削除してくれるとうれしいなぁと思いますが、普通に使う分には問題ないと思いますので、初心者さんPCなどに仕込む場合にはお勧めじゃないかなぁと思います。

2009/02/25 追記
ファイル名として利用できない文字の問題を作者様に対応して頂きました。

最新版は↓こちらです。

・・・と思ったら、以下のようなエラー画面が出てWindows2000で動作しなくなったようです。

System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.EntryPointNotFoundException: DLL 'kernel32.dll' の 'CreateActCtx' というエントリ ポイントが見つかりません。

WindowsXP環境では問題なく動作しましたので、おそらくXP以降でしか使えない機能が利用されているようです。

2009/02/26 追記
Windows2000で動作しないというのは誤情報でしたorz

作者様に修正して頂いたV4.22でも動作しないので、おかしいと思い別のWindows2000機で試したら4.21も4.22もどちらも問題なく動作。
さらに、問題のPCでは以前動作した4.20が動作しなくなっていてこれはおかしいと思い最近の行動を振り返ってみたところ、思い当たる節が(^^;;

で、色々試した所、結局原因はKDWと言うソフトウェアで導入した「uxtheme.dll」と言うDLLがシステムディレクトリにあったためでした。

と言うか、foobar2000の最新版をWindows2000で動かすために下記のサイトを参照させて頂いたのですが、

の通りにやってみたらまさかこんな悪影響が出るとは(^^;;;

(このファイル、通常はWindows2000に含まれていないため影響ないと思ってシステムディレクトリに入れてみたのですが、こんな事もあるんですねぇ)

と言う訳で、PriMoreの作者様大変お騒がせ致しましたm(_ _)m

↓作って頂いた最新版はこちら

Posted by Takuchan at 2009年02月20日 23:53 | トラックバック(1)

初トラックバックありがとうございます。

IEでファイル名だけになるのは
意図した動きじゃない気もしますが(笑)

禁止文字の置換は対応したいと思います。

 誰も使ってない連続印刷(psファイルマージ)機能
とか消して綺麗にしたらソースは公開します・・たぶん

では〜

Posted by: komikoni at 2009年02月24日 00:53

おぉ、作者様が!!

こちらこそ便利なアドオンの公開ありがとうございます。

IEでの挙動は意図していなかったのですね(^^;

禁止文字の置換よろしくお願い致しますm(_ _)m

Posted by: Takuchan at 2009年02月24日 22:23

komikoniです。
ご指摘頂いた件、対応しました。

削除ではなく"_"にしてます。
(意向に沿えずすいません)

IEでの挙動は意図していないと書きましたが
ファイル名を貼り付ける前にGetBaseName
をしていました。すっかり忘れてましたww。

トラックバック受けるのも初めてなので
初めて送ってみました。感動です♪

Posted by: komikoni at 2009年02月25日 01:51

こちらの確認不足で深夜にわざわざ更新して頂いて申し訳ありませんでしたm(_ _)m

これからもありがたく使わせて頂きます。

Posted by: Takuchan at 2009年02月26日 23:10

こんばんは、UXTHEME.DLLをシステムにインストールを推奨してるのは、結構デザインの異常が改善されるソフトウェアがあるんですが、こういうこともあるんですねぇ。

エラーを見ると、CreateActCtxをコールしてる時点で、XP専用の処理に入ってるので、どうやら、uxthemeの存在で、XPだと判定しているんだということが分かります。
ちなみにKDWのKERNEL32.dllは CreateActCtxをダミー関数として取り込んでるので、PrimoPDFフォルダーにインストールされていれば、エラーにならないかもしれません。
後、DLLの関数チェックには、Dependency Walkerを使うと良いと思います。

Posted by: 黒翼猫 at 2009年02月27日 04:11

おおっ、KDWの作者様も!(^^;;;

CreateActCtxで調べたときにどうもXPの記事ばかりが出たのでKDWかなと当たりを付けたんですが、Dependency Walkerなんて便利な物があったんですね。

次回以降は時間の許す範囲でキチンと調べてみたいと思います。

と言うか、せっかくなので黒翼猫様が書かれていた記事を参考に今回問題になった「PrimoPDF.exe」で試してみました。

その結果、実行時にロードされる.net Frameworkの「MSCORWKS.DLL」がLoadLibraryExW関数で「UXTHEME.DLL」探しているみたいでした。

ちなみに、PrimoPDFのフォルダにKDWのKERNEL32.dllを簡易設定でインストールしたところ無事動くようになりました。

以上、いろいろと参考になる情報、ありがとうございましたm(_ _)m

Posted by: Takuchan at 2009年02月27日 23:38