- PR -

DrawStringを使用しての印字について質問

1
投稿者投稿内容
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2005-12-15 10:04
こんにちは、きのぴおです。

VisualStudio2003 C#を使用しています。
DrawStringを使って文字の印刷をしています。
印字位置をミリで考えたいので以下のように試しました。
結果は全然違う位置に印字されました。
左から約125ミリ、上から約185ミリの位置です。

質問
印字位置をミリで指定したいのでどのように変換すればよいのでしょうか?

試したコード
private void pd_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{

Font font = new Font("MS ゴシック", 12);
Brush bs = new SolidBrush(Color.Black);

//左から20ミリ 上から30ミリの位置に印字したい
//使用プリンタの解像度は600DPI
float fx =(20*600/25.4);
float fy =(30*600/25.4);

e.Graphics.DrawString("テスト文字列",font,bs,fx,fy);
e.HasMorePages=false;
}

C#は只今勉強中でして的外れな質問かもしれませんが
よろしくお願いします。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2005-12-15 10:16
今日は

Graphics g=e.Graphics;
g.PageUnit = GraphicsUnit.Millimeter;
で行けませんか


[ メッセージ編集済み 編集者: rvmx 編集日時 2005-12-15 10:17 ]
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2005-12-15 11:01
きのぴおです。早速のコメントありがとうございます。

Font font = new Font(CB2.Text, 12);
Brush bs = new SolidBrush(Color.Black);

Graphics g=e.Graphics;
g.PageUnit = GraphicsUnit.Millimeter;
e.Graphics.DrawString("テスト文字列",font,bs,100,100);//左から100ミリ 上から100ミリのつもり
e.HasMorePages=false;

教えていただいたようにしてみました。
結果は、左上とも約105ミリの位置に印字されました。
絶対位置ではないのでしょうか?なんとなく余白が加味されているように
思います。絶対位置での指定はできないのでしょうかね。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-12-15 11:28
こんにちは。

引用:

なんとなく余白が加味されているように
思います。絶対位置での指定はできないのでしょうかね。


まさにそのまま。プリンタの設定で余白を指定しているだけ、だったりして。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-15 11:29
ドライバ依存ということもあるので、きっちり合わせるのは難しいですね。
私は、ラインプリンタなんかを扱う時は設定ファイルに、+ - の補正をかける項目を設けています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-12-15 13:00
ここが参考になるかと
http://www.codeproject.com/csharp/DotNetprinterbounds.asp
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2005-12-15 15:11
きのぴおです。

burton999 さんに教えていただいたページにあったコードをそのまま
使ったみました。
私の使用しているプリンタ Canon LBP-930 で印刷すると
左から1インチ上から1インチのところから四角形が印刷されました。
余白が1インチ?うーーん、これはあり得ないです。
プリンタのプロパティを確認しても余白という項目はないのですけど
どこで設定してるんだろう?
ハード的な印刷可能領域としては上下左右5mmのです。

むずかしいことをしたいんじゃなく、普通に文字が指定通りの位置に
印字できたらいいだけなのになんでこんなにハマるんだろう。
まいったなぁ...

じゃんぬねっとさん
あ、僕も調整値は設定できるようにしています。これがないと不便なので。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-15 15:50
引用:

余白が1インチ?うーーん、これはあり得ないです。



同じ?
http://blogs.wankuma.com/naka/archive/2004/08/24/4331.aspx
1

スキルアップ/キャリアアップ(JOB@IT)