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

わんくま同盟

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

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


(過去ログ 76 を表示中)
■45103 / )  Re[7]: プリンターフォントを使った印刷方法を教えてください
□投稿者/ Jitta (617回)-(2009/12/30(Wed) 08:58:06)
No45085 (裕猫 さん) に返信

 なんていうか、自分がわかっていることと、相手がわかっていること、相手がわかっているであろうことを、区別してほしい、かな。

> 前回いろいろご指導いただき印刷のコントロールができるようになったのですが、新たな問題が生じてしまいました。
これによって、「以前質問があった」「印刷させる方法がわからなかった」「いまはわかる」ということがわかります。
私が覚えている裕猫さんの前の質問は、DataGridView のことだったので、「印刷の質問もしたのか」程度の認識しかありませんでした。


> 現在会社のプリンターはドットインパクトプリンターが10台ほどプリントサーバーでネットワークプリンターとしてつながっています。
ここはGoodです。

> 印刷時に文字の違いが出ないようにプリンター内臓のプリンターフォントを使用して出力をかけているのですが、
> VS2008C#ではプリンターフォントを使用しての印刷ができないと出ていました。
ここは、わかりませんでした。
私の認識では、プリンターに送るのは、ビットマップ イメージです。そのため、「絵を送るのに、なぜ印刷時に文字が違うのだろう?」
と思いました。しかし、「ドットインパクトプリンター」と書かれていますから、「文字情報」を送っているのかと思いました。
それなら、「プリンターによって文字が違う」のは、返って「当たり前ではないか?」と思いました。
そこで、次のような返答になりました。

フォントにも“著作権”があるので、メーカーが変われば違うはず。
さらに、“古いプリンター”なら、“メモリも少ない”ので、英数、もしかしたらカナのフォントしかありません。
つーか、最近のプリンターなら、フォント積んでないはず。
Windows 標準のドライバーで印字できるなら、“画像”を送っているはずです。
おなじ画像が作れれば、プリンターが変わっても、フォントは同じはずですよね。
それが違うということは、描画の時にフォントを指定していないから、デフォルトのフォントを使い、それが違っているのでしょう。



> いろいろぐぐった結果GDI32.dllを使うとできるようなことが書いてありましたが、使い方がわかりません。
> textoutという関数があるようでそれで出すらしいのですが、
> プリンターの指定(hdiというところで指定するらしいのですが)になんと書けばいいのか、とかがわかりません。
> このようなプリンターフォントを使用しての印刷をしていらっしゃるかたわかりましたらサンプルコードなどを教えていただきたいのです。
ここを読んで思ったことは、「何をキーワードにして調べて、どのサイトを読んだのだろうか」ということです。
どのように書いてあることがわからなかったのか、わかりません。そのため、「こうすればよい」と書いたことが、
サイトに書いてあるのと同じことになるかもしれません。そうすると、やっぱりそれはわからないでしょう。
わからないから調べて、わからないから質問して、やっぱりわからない説明をされた。とっても時間の無駄ではないでしょうか。
何をして、どんな結果を得て、どう考えたのか。まとめるのは面倒ですが、まとめずに質問するほうが、もっと面倒なことになると思います。


 さて、本題のほうですが、先に書いたとおり、私が扱っているレーザー プリンターでは、プリンターにフォントは積んでいません。
また、過去に使用していたエプソン製のインパクト プリンターでは、フォントをつんでいました。
しかし、今のプリンターと、プロトコルが違います。ESC/P というプロトコルです。
このフォーマットは、文字コードを送っていたと思います。
しかし、文字コードであって、文字の形を送っているわけではないので、先に書いたとおり、プリンターのメーカーによってフォントが異なっている可能性があります。
また、これの場合、コード表が、プリンターの説明書に載っていると思います。制御コードだけでなく、文字のコードもあるはずです。
20数年前のことなので、かなりあいまいな記憶ですが。

 ただ、ドライバーは、どんなアプリケーションからも、統一されたフォーマットで、データを受けていると思います。
プリンターごとに異なるフォーマットでデータを送らなければならないなら(大昔は、そうでした)、アプリケーションごとにプリンターに対応しなければならないからです。
しかし、実際には、アプリケーションはどんなプリンターに対しても印刷できます。
これは、統一フォーマットからプリンターのローカル言語へ、ドライバーが変換を行っているからです。
そう考えると、インパクト プリンターであっても、少なくともアプリケーションからは、画像としてデータを送っていると思われます。


 このように考えるので、なぜ「フォントが違う」事態が起きたのか、つまり質問の原因がわかりませんでした。
解決済み
返信 編集キー/


管理者用

- Child Tree -