いろいろありましたが、まとめ、いきましょう。とりあえずPDFCreatorのverは0.9.8になります。
PDFCreator0.9.8 (日本語対応バイナリ配布)
コンパイル環境のない方の為に、やすさんからいただいたバイナリとソースをUPしておきますね。やすさん、ありがとう!
配布
- PDFCreator0.9.8 (日本語対応exeファイル)
PDFCreator_0516.zip
(MD5 : 91ae1b27a964be1cfdbd111b286e445f) - 参考 PDFCreator0.9.8(上記ソース)
Version 0.9.8_090516.zip
(MD5 : db8944afaa2e672b31d9f66a8a473060)
使い方
- 本家からPDFCreator0.9.8をDLしていただき、一旦インストールします。
- その後、PDFCreator.exeを上記1.の日本語版exeファイルと差し替えます。
動作環境の報告
当バイナリは、W2K(SP4)/XP(SP3)での動作が確認されています。
Vista(32bit SP2)環境では、"VB6JP.DLL"をインストールする必要があるようです(これはVisual Basic 6.0 SP6あたりのランタイムを入れれば入ると思われ…)。
以下は上記ソースにいたるまでの解説・経緯のまとめになります。本家でバージョンアップがされたときのために…。
メニュー画面の日本語化について。
- PDFCreatorの文字化けをなおす…必須
- PDFCreatorの文字化けをなおす2…小手先
- PDFCreatorの文字化け問題-修正箇所発見…Vb6.0でコンパイルできるヒト向け(これで完璧に)
PDF情報の日本語入力について(※すべて、VB6.0でコンパイルできるヒト向け)
- PDFCreatorの日本語問題-PDF情報編2
- PDFCreatorの日本語問題-PDF情報編…(2)EncodeCharsについての部分のみ利用してください
2.の記事にある「(1)ReplaceEncodingCharsについて」は不完全だということがわかりましたので、以下がやすさんの差し替えソースです。
[Common]-[modPDF.bas]
Public Function ReplaceEncodingChars(Str1 As String) As String '---ErrPtnr-OnError-START--- DO NOT MODIFY ! --- On Error GoTo ErrPtnr_OnError '---ErrPtnr-OnError-END--- DO NOT MODIFY ! --- 50010 Dim i As Integer, tStr As String '---2009/05/16-START--- by yasu Dim bStr() As Byte Dim j, k As Integer '---2009/05/16-End--- by yasu 50020 tStr = "" 50030 ' First we look for oct encoding chars '---2009/05/16-START--- by yasu '50040 For i = 127 To 255 '50050 Str1 = Replace$(Str1, "\" & Oct$(i), Chr$(i)) '50060 Next i 50070 ReplaceEncodingChars = Str1 j = 0 ReDim bStr(Len(Str1)) For i = 1 To Len(Str1) Do If Mid$(Str1, i, 1) <> "\" Then bStr(j) = AscB(Mid$(Str1, i, 1)): j = j + 1 Else If i <> Len(Str1) Then If Mid$(Str1, i + 1, 1) Like "[\{}()]" Then bStr(j) = AscB(Mid$(Str1, i + 1, 1)): j = j + 1: i = i + 1 Exit Do End If End If If Len(Str1) - i > 3 Then For k = 1 To 3 If Not Mid$(Mid$(Str1, i + 1, 3), k, 1) Like "[0-9]" Then Exit For End If Next If k = 4 Then bStr(j) = CByte("&O" & Mid$(Str1, i + 1, 3)): j = j + 1: i = i + 3 Else bStr(j) = AscB(Mid$(Str1, i, 1)): j = j + 1 End If Else bStr(j) = AscB(Mid$(Str1, i, 1)): j = j + 1 End If End If Loop Until 1 Next tStr = StrConv(bStr, vbUnicode) '---2009/05/16-End--- by yasu 50080 ' Second we look for hex encoding chars 50090 If Len(Str1) >= 4 Then 50100 If Mid$(Str1, 1, 1) = "<" And Mid$(Str1, Len(Str1), 1) = ">" Then 50110 If Len(Str1) Mod 2 = 0 Then '---2009/05/16-START--- by yasu ReDim bStr((Len(Str1) - 2) / 2) '---2009/05/16-END--- 50120 For i = 2 To Len(Str1) - 1 Step 2 50130 If IsNumeric("&H" & Mid$(Str1, i, 2)) = True Then 50140 If CByte("&H" & Mid$(Str1, i, 2)) > 255 Then 50150 Exit Function 50160 Else '---2009/05/09-START--- by yasu bStr((i - 2) / 2) = CByte("&H" & Mid$(Str1, i, 2)) '50170 tStr = tStr & Chr$(CByte("&H" & Mid$(Str1, i, 2))) '---2009/05/09-END--- by yasu 50180 End If 50190 Else 50200 Exit Function 50210 End If 50220 Next i '---2009/05/09-START--- by yasu tStr = StrConv(bStr, vbUnicode) '---2009/05/09-END--- by yasu 50230 End If 50240 End If 50250 End If 50260 If Len(tStr) > 0 Then 50270 ReplaceEncodingChars = tStr 50280 End If '---ErrPtnr-OnError-START--- DO NOT MODIFY ! --- Exit Function ErrPtnr_OnError: Select Case ErrPtnr.OnError("modPDF", "ReplaceEncodingChars") Case 0: Resume Case 1: Resume Next Case 2: Exit Function Case 3: End End Select '---ErrPtnr-OnError-END--- DO NOT MODIFY ! --- End Function
後半だけでなく、前半の8進変換もどきもバイト配列に一端いれてから日本語変換する必要があったようです。
前段の8進もどきで一体なにをやっているかといいますと…。
たとえば「\203R\203\201\203\223\203g\202\360\223\212\215e」を日本語にすると「コメントの投稿」となるわけですが。「\203R」の「\数値3桁」を16進数に変換、アルファベットをASCIIの16進数に変換すると「83 54」。これはS-JISでの「コ」…。以下略。──という具合に日本語に変換していかなくてはならないわけですよ。数値にアルファベットと入り交ざっているこいつらを一端16進数に戻して、S-JISに変換する、という流れ。
引数で受け取る値を見ても、一見「!?」という感じですし、暗号でも見ている気分でしたよ。やすさんスゴイ!!ヽ(´ー`)ノ
16 件のコメント:
こんばんわ、じょに さん。
一昨日に事故で車を廃車にしてしまったやすです。
きちんとまとめて頂いて感謝します。
物忘れがひどい(既に"modCDlg.bas"の修正の件で実証済)ので、新しいバージョンが出たときに参考にさせて頂きます。
あと8進数変換もどきのロジックですが、確認のために一時的に組んだロジックなので、もっと綺麗な(速い)ロジックがあれば修正してください。
やすさん、こんばんわ。
廃車までの事故とは……。大変でしたね。お体の方は大丈夫ですか。
当初まとめ記事は、ログが流れて後から読みづらくなっていくブログではなく、フツーのサイトにしようと考えていたのですが、「Google サイト」が使いづらくて諦めました。(-_-;)
Google サイトのサービスだと、ソースコードをハイライトするjavascriptのファイルがアップロードできないんですよね。
ソースコードが主役予定なのに!! ヽ(`Д´)ノ──と思ってテンションがさがり、とりあえず"鉄は熱いうちにうて"とばかりにまとめておくことを先決した次第です。
ReplaceEncodingCharsのロジックの修正案は…。引数のパターンの全容が私のアタマの中ではぼやーっとしているので、手強いですね。(^^;
新たなる猛者が現れたりしたら面白いと思いますけど(←他力本願気味)。
初めまして。
クレクレ君で申し訳ないんですが、日本語対応された PDFCreator のバイナリ、配布していただけませんか?
ライセンス上はGPLなので問題ないと思います。
もしくは Souceforge.JP の方でもプロジェクトがあるようなので、そちらで活動していただけるとありがたいな~、とか。
http://sourceforge.jp/projects/pdfcreator/
勝手ばかり言ってすいませんが検討いただけるとうれしいです。
はじめまして。
こちらで掲載されているコードに修正してコンパイルしてみたらほとんどの場合うまくいくようになりました!ありがとうございます!
ただ、ファイル名にカレンダーなど「カレ」という文字列が入っていると保存できませんでした。残念ながら、自分では解析できませんでしたので、報告のみです。。。
初めまして、b-wingさん、pongarさん。
>b-wingさん
バイナリですね…。
私個人のマシンにVB6.0が入っているわけではないので、
配布となると、ちと微妙なのすよ。(^^;
やすさんが作成されたexeをもっていますが、
これ、UPしても良いでしょうかね?<やすさん (見ているかしらー)
>pongarさん
ファイル名に「カレ」を含んでいると、
ファイル名に「カレ」が入らないということでしょうか?
こちらでは「カレンダー」や「200906カレンダー」でも保存はできて、
不具合を確認することはできませんでしたが…。
ちなみにこちらの動作環境は、XPproSP3.0ですね。
P.S.
当方、明日から1週間ほど旅にでます。
非モバイラーなので、音信不通になるかも…。(-_-;)
こんにちは、じょにさん。
私にはUpする環境がないので、Upして頂ければ非常に嬉しいのですが、まだ汎用性には問題がありそうです。
私のW2K(SP4)/XP(SP3)では動作しましたが、Vista(32bit SP2)環境では正しく動作しませんでした。ただしVista上にVB6(SP6)をインストールして再作成すると正しく動作しました。
環境依存なのかプログラム中にOS切り分けが必要なのかがまだわかっていません。
P.S.
旅ですか、気を付けて行ってきてください。
因みに私は九州への旅の2日目で廃車する羽目になりました(笑)。
>じょにさん
すみません、こちらの書き方が間違っていました。
ファイル名ではなくタイトル名でした。。「コメ」もダメでした。
こちらの環境はXPSP3です。
コードの修正方法が悪いだけかもしれないです。
こんにちは、じょにさん。
先程のVistaの件は誤りでした。
VB6の既定フォントが"MS Sans Serif"なので文字化けが発生しているようです。
"VB6JP.DLL"を登録することで回避できます。Vistaの他にWindows 7 RCでも確認できました。
はじめまして、pongarさん。
コンパイル環境があるようなので、じょにさんの「PDFCreatorの日本語問題-PDF情報編2」にあるofnオブジェクトの設定値を確認してみてはいかがでしょう。
.sFile がファイル名(タイトル名)になりますので、正しく設定されているでしょうか。
あとは、記事にもあるように長さが正しければ"GetSaveFileName(ofn)"が成功するはずです。
>じょにさん
はじめまして、コメントありがとうございます。
おかげで解決しました!
「PDFCreatorの日本語問題-PDF情報編2」での修正箇所を私が間違っていました。SaveFileDialogではなくOpenFileDialogを修正してしまっていました。WinMergeで確認していたんですが、どうもSaveFileDialogとOpenFileDialogの該当コード部分はまったく同じコードだったので気付きませんでした。
一応ファイルをアップしてみました。
http://firestorage.jp/download/f34736f208593d8c694406ab8eb75cab6c1d0150
>やすさん
まちがえてじょにさん宛にしてしまいました、ごめんなさい。。。
固定のファイルパスに保存できるPDFを探してたんですが、Bullzipがフリーだと会社利用では10人までしか使用できなかったので、困っていたとこなんです。じょにさん、やすさん、ありがとうございました。
こんにちは、じょにです。旅から無事、帰ってきました。
というわけで、早速バイナリUP!
新たに記事をたてることも考えましたが、
まとめている方がわかりやすいので、
バイナリはやっぱりこの記事にUPすることにしました。
そしてたぶんより多くのヒトが欲しいのはやっぱり"コレでしょ"ということで、
記事の最初に挿入。
Vista情報ともども、やすさん、本当にありがとうございました。
pongarさんも解決できてよかったですね!
[SaveFileDialog]は私も翻弄されましたが、
保存するところなので、大切なんですよね。
こんにちは。
バイナリのアップロードに失敗していませんでしょうか?いくらやってもうまくいかないようです。
こんばんわ、いまひとつ、ツメの甘いじょにです。
匿名さん、ご指摘ありがとうございました。
バイナリのzipはFireFox(3.5)でUPすると、
何度やってもちゃんとUPできないというまさかの事態。
何故かIEであげたら一発でうまくいきました…。
えぇっ、なんで?! Σ(゚Д゚;≡;゚д゚) (←MSっ子のわりに…)
今回はこちらでもDLしてハッシュを確認しましたので、無事かと思われます。
お騒がせしましたー。
こんにちは。上記の匿名で書き込みしたものですが、無事ダウンロードでき、解凍できました。
ただ、当方の環境はXP pro OEM版でSP3環境、インストールの際にSP+メーカーなるツールを使ってサービスパック適用済みインストーラを使っており、挿げ替えた状態でも文字化けが出ていることからVB6JP.DLLの問題に該当する可能性があるようです。
XP pro SP2です。
バイナリ(exe)を入れ替えましたが、うまく日本語化できません(>_<)
日本語化OK:タイトルバー、ツールバー、ボタン、ドロップダウンリスト、チェックボックスの説明
他の部分はすべて文字化けします。
アドバイスを頂けると助かります。
匿名さん、splashさん、こんばんわ。
匿名さんのおっしゃるソフトはこれですね。
http://www.forest.impress.co.jp/lib/sys/instmng/instsupt/spmaker.html
このようなソフトがWinにもあるのですね。
情報システム部門が重宝していそうなソフトですね。
splashさんの
日本語化OK:タイトルバー、ツールバー、ボタン、ドロップダウンリスト、チェックボックスの説明
この組み合わせのみOKというのは、
[japanese.ini]をあてたときの差し替えてない状態と一緒ですよねー…。うーむ。
疑う部分は、匿名さんのご指摘どおり、vb6jp.dllかなぁ?という気がしますね。
▼vb6jp.dllの薀蓄はこの辺。
http://support.microsoft.com/kb/813131/ja
WINDOWS\system32にVB6JP.DLLはあるでしょうか?
これが入っていないと、splashさんの挙げていらっしゃる組み合わせで
文字化けをおこします。
なお、VB6JP.DLLは、ベクター等で配布されているVB6のランタイムを入れれば
そこに含まれていますよ。
コメントを投稿