C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 76 を表示中)
■45178 / )  Re[8]: プリンターフォントを使った印刷方法を教えてください
□投稿者/ 裕猫 (82回)-(2010/01/05(Tue) 09:14:49)
No45103 (Jitta さん) に返信
新年あけましておめでとうございます。本年もよろしくお願いいたします。

>  なんていうか、自分がわかっていることと、相手がわかっていること、相手がわかっているであろうことを、区別してほしい、かな。
>
ご指摘ありがとうございます。以後気をつけていきたいと思います。
>
>>印刷時に文字の違いが出ないようにプリンター内臓のプリンターフォントを使用して出力をかけているのですが、
>>VS2008C#ではプリンターフォントを使用しての印刷ができないと出ていました。
> ここは、わかりませんでした。
> 私の認識では、プリンターに送るのは、ビットマップ イメージです。そのため、「絵を送るのに、なぜ印刷時に文字が違うのだろう?」
> と思いました。しかし、「ドットインパクトプリンター」と書かれていますから、「文字情報」を送っているのかと思いました。
> それなら、「プリンターによって文字が違う」のは、返って「当たり前ではないか?」と思いました。
> そこで、次のような返答になりました。
> 「
> フォントにも“著作権”があるので、メーカーが変われば違うはず。
> さらに、“古いプリンター”なら、“メモリも少ない”ので、英数、もしかしたらカナのフォントしかありません。
> つーか、最近のプリンターなら、フォント積んでないはず。
ここのところ、社長に現状プリンターフォントを使って出力しているからそのようにすればちゃんと印刷できると言われたので印刷物見て全て同じ文字の大きさ、字体で出てきているように見えたので、プリンターフォントを使えば同じになるのだと誤解しておりました。

> Windows 標準のドライバーで印字できるなら、“画像”を送っているはずです。
そう思って、それならばe.Graphics.DrawStringで印刷できるはずと考え、出力したのですが、2バイト文字が印刷できませんでした。
後にいろいろ試して原因はプリンタードライバーがGeneric/TextOnlyなのが原因とわかりましたが、そのドライバーで2バイト文字を印刷するにはプリンターフォントを使うようにしなければならないらしいです。その方法がわかりません。これには文字コードを送るのか?テキストデータを送るのか?どのようなデータを送ればいいのか?

>>いろいろぐぐった結果GDI32.dllを使うとできるようなことが書いてありましたが、使い方がわかりません。
>>textoutという関数があるようでそれで出すらしいのですが、
>>プリンターの指定(hdiというところで指定するらしいのですが)になんと書けばいいのか、とかがわかりません。
>>このようなプリンターフォントを使用しての印刷をしていらっしゃるかたわかりましたらサンプルコードなどを教えていただきたいのです。
> ここを読んで思ったことは、「何をキーワードにして調べて、どのサイトを読んだのだろうか」ということです。
> どのように書いてあることがわからなかったのか、わかりません。そのため、「こうすればよい」と書いたことが、
> サイトに書いてあるのと同じことになるかもしれません。そうすると、やっぱりそれはわからないでしょう。
> わからないから調べて、わからないから質問して、やっぱりわからない説明をされた。とっても時間の無駄ではないでしょうか。
> 何をして、どんな結果を得て、どう考えたのか。まとめるのは面倒ですが、まとめずに質問するほうが、もっと面倒なことになると思います。
>
先のところからの続きのなりますが、そういう理由で 「印刷 プリンターフォント」というキーワードで検索したところ最終的にオショウさんが教えてくださったhttp://www.epson.jp/dl_sas/faq/adv/developer/advdev00003.htmに辿り着きそこでお手上げになってしまいました。

>  さて、本題のほうですが、先に書いたとおり、私が扱っているレーザー プリンターでは、プリンターにフォントは積んでいません。
> また、過去に使用していたエプソン製のインパクト プリンターでは、フォントをつんでいました。
> しかし、今のプリンターと、プロトコルが違います。ESC/P というプロトコルです。
> このフォーマットは、文字コードを送っていたと思います。
> しかし、文字コードであって、文字の形を送っているわけではないので、先に書いたとおり、プリンターのメーカーによってフォントが異なっている可能性があります。
> また、これの場合、コード表が、プリンターの説明書に載っていると思います。制御コードだけでなく、文字のコードもあるはずです。
> 20数年前のことなので、かなりあいまいな記憶ですが。
>
>  ただ、ドライバーは、どんなアプリケーションからも、統一されたフォーマットで、データを受けていると思います。
> プリンターごとに異なるフォーマットでデータを送らなければならないなら(大昔は、そうでした)、アプリケーションごとにプリンターに対応しなければならないからです。
> しかし、実際には、アプリケーションはどんなプリンターに対しても印刷できます。
> これは、統一フォーマットからプリンターのローカル言語へ、ドライバーが変換を行っているからです。
> そう考えると、インパクト プリンターであっても、少なくともアプリケーションからは、画像としてデータを送っていると思われます。
>
>
>  このように考えるので、なぜ「フォントが違う」事態が起きたのか、つまり質問の原因がわかりませんでした。
ここのところは私も原因はつかんでいないのが現状です。社長に文字の大きさなどの違いを出さないためにプリンターフォントを使うのだと説明受けただけなので。
で現状ですが、ドライバーをWindows標準の対応ドライバー(Generic/TextOnlyではなくVP960ドライバー)にして.Graphics.DrawString
で印刷かけています。M4023のドライバーがあるかまだ調べていませんが、Windows標準の対応ドライバー+e.Graphics.DrawStringで組んで対応しようと考えています。
返信遅くなり申し訳なかったですが今年もよろしくお願いいたします。
                                                 敬具 裕猫
解決済み
返信 編集キー/


管理者用

- Child Tree -