- - PR -
C# 印刷位置の指定方法(DrawString)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-15 13:35
PrintDocumentクラスを使って左上端を基準に下10mm、右10mmに文字列を描画します。
期待に反して"abc"を基準にした時の"def"の位置は下10mm、右10mmで無く 下36mm、右36mmに印刷されてしまいます。 縮尺の相違が生じた原因が分かりません。 単位の換算方法が誤っているのでしょうか? あるいは、解像度の値が誤っているのでしょうか? 試みにg.DpiX,g.DpiYをPrinterResolution.X,PrinterResolution.Yに 置き換えてみましたが結果は同じでした。 // PrintDocumentクラスのPrintPageイベント内部の処理 PrintPageEventArgs e .... Graphics g = e.Graphics; // (x1,y1) = (0mm,0mm) float x1 = 0f; float y1 = 0f; // (x2,y2) = (10mm,10mm) float x2 = 10f; float y2 = 10f; // 単位の換算 mm → 画素数 PointF p1 = new PointF(x1 / 25.4 * g.DpiX , y1 / 25.4 * g.DpiY); PointF p2 = new PointF(x2 / 25.4 * g.DpiX , y2 / 25.4 * g.DpiY); g.DrawString("abc" , font , brush , p1); g.DrawString("def" , font , brush , p2); | ||||
|
投稿日時: 2007-05-15 14:13
こんにちは。
余白1インチ(25.4mm) + 10mm なんてことはないんですよね? 念のため、下0mm、右0mmに印字した結果がどうなるか知りたいです。 | ||||
|
投稿日時: 2007-05-15 14:30
こんにちは。
"abc"が下0mm、右0mmなんですね。 よく読んでませんでした。ごめんなさい。 | ||||
|
投稿日時: 2007-05-15 15:41
こんにちは。
私の環境で試してみたところ、 どうもデフォルトではスケール(マップモード)が0.01インチ単位になってますね。 縦・横10mmずらすには、下記のようなコードでできました。
| ||||
|
投稿日時: 2007-05-15 16:00
計算不要
ヒント pageunit _________________ | ||||
|
投稿日時: 2007-05-15 16:48
ご回答ありがとうございます。GraphicsUnitで問題が解決できました。
例えば、 g.PageUnit = GraphicsUnit.Millimeter; と設定することで、PointFがミリ単位として解釈されるようになりました。 |
1