やすさんのUPしてくださったソースと比較して、日本語(マルチバイトの文字列)が混ざると、PDFを[保存]できない原因がわかりました。
[保存]できない現象に対しての、修正箇所は
[Common]-[modCDlg.bas]-[SaveFileDialog]
もともとこのモジュールではOPENFILENAMEに対して下記のようにセットしていますが。
オリジナル
50160 With ofn 50170 .nStructSize = Len(ofn) 50180 .hWndOwner = hwnd 50190 .sFilter = tFil 50200 .nFilterIndex = FilterIndex 50210 .sFile = InitFilename & Space$(1024) & vbNullChar & vbNullChar 50220 .nMaxFile = Len(.sFile) 50230 .sDefFileExt = DefaultFileExtension & vbNullChar & vbNullChar 50240 .sFileTitle = vbNullChar & Space$(512) & vbNullChar & vbNullChar 50250 .nMaxTitle = Len(ofn.sFileTitle) 50260 If InitDir = vbNullString Then 50270 .sInitialDir = GetPDFCreatorApplicationPath & vbNullChar & vbNullChar 50280 Else 50290 .sInitialDir = InitDir & vbNullChar & vbNullChar 50300 End If 50310 .sDialogTitle = DialogTitle 50320 .Flags = Flags 50330 End With
OPENFILENAME構造体は、
.nMaxFile :ファイル名のバッファのサイズを設定
.nMaxFileTitle :フルパス用のバッファのサイズを設定
ですので、オリジナルのようにLenで計算している(行番号07.、10.)と、マルチバイトの文字列が入るとおかしくなっちゃうんですねー。
というわけで、下記のようにLenBにあらためます。
修正後
50160 With ofn 50170 .nStructSize = Len(ofn) 50180 .hWndOwner = hwnd 50190 .sFilter = tFil 50200 .nFilterIndex = FilterIndex 50210 .sFile = InitFilename & Space$(1024) & vbNullChar & vbNullChar '50220 .nMaxFile = Len(.sFile) 50220 .nMaxFile = LenB(.sFile) 50230 .sDefFileExt = DefaultFileExtension & vbNullChar & vbNullChar 50240 .sFileTitle = vbNullChar & Space$(512) & vbNullChar & vbNullChar '50250 .nMaxTitle = Len(ofn.sFileTitle) 50250 .nMaxTitle = LenB(ofn.sFileTitle) 50260 If InitDir = vbNullString Then 50270 .sInitialDir = GetPDFCreatorApplicationPath & vbNullChar & vbNullChar 50280 Else 50290 .sInitialDir = InitDir & vbNullChar & vbNullChar 50300 End If 50310 .sDialogTitle = DialogTitle 50320 .Flags = Flags 50330 End With
この部分を修正すると無事、マルチバイトの文字列が入っていても、[保存]できるようになりますねぇ。
ちなみに[ReplaceEncodingChars]については、前回の16進変換の修正のみのモジュールのままでも、とりあえずのところは動きました(←そして8進変換の役割が、相変わらず、わかっていないじょにでした。[\XXX]の8進数を文字に置換しているのはわかっていても、「何故変換するのか。なにが入ってきて、どう変換すべきなのか」というそもそもの役割とかが見えきていないッス・泣)。
2 件のコメント:
こんばんわ。
すみません、まさか"modCDlg.bas"を修正していたとは・・・全く記憶にありませんでした。
なぜか今も思い出せません。
あと追加した8進変換ですが、例えばFirefoxでじょにさんのblogのコメント投稿のページを印刷(PDF化)すると、"Blogger: log book - \203R\203\201\203\223\203g\202\360\223\212\215e"といったデータが渡され、8進部分が文字化けしたので16進変換と同じ修正をしました。ただ、8進数で渡されるパターンが全くわかりません。
こんばんわ。
あああ、確かに8進数もどきでも、タイトル類の日本語が入ってきますね。
「\203R\203\201\203\223\203g\202\360\223\212\215e」を日本語にすると「コメントの投稿」。
たとえば「\203R」の「\数値3桁」を16進数に変換、アルファベットをASCIIの16進数に変換すると「83 54」。これはS-JISでの「コ」…。以下略。
まるで暗号の解読みたいな気分になってきました。ヽ(´ー`)ノ
コメントを投稿