DOBON.NET DOBON.NETプログラミング掲示板過去ログ

印刷位置の設定について

分類:[.NET]

A4,A3,B4といった通常の用紙に表や文字列を印刷する場合、
CADのように実長(mm単位)で印刷させたいのですが、スケールを合わせる方法が
わかりません。ご教授お願いします。
■No1972に返信(パオさんの記事)
> A4,A3,B4といった通常の用紙に表や文字列を印刷する場合、
> CADのように実長(mm単位)で印刷させたいのですが、スケールを合わせる方法が
> わかりません。ご教授お願いします。

どのような方法でやっているのか分からないので何とも言えませんが、PrintPageイベントハンドラで得られるe.GraphicsのDpiXとDpiYから解像度が分かりますので、これから計算できそうです。
■No1980に返信(管理人さんの記事)
> ■No1972に返信(パオさんの記事)
>>A4,A3,B4といった通常の用紙に表や文字列を印刷する場合、
>>CADのように実長(mm単位)で印刷させたいのですが、スケールを合わせる方法が
>>わかりません。ご教授お願いします。
>
> どのような方法でやっているのか分からないので何とも言えませんが、PrintPageイベントハンドラで得られるe.GraphicsのDpiXとDpiYから解像度が分かりますので、これから計算できそうです。

ご返事ありがとうございます。
自分でやろうとしているのは、たとえば
「用紙の左上から縦横30mmの位置から一辺の長さ100mmの正方形を描き、
中心に半径20mm円を描き、その図形に寸法線と寸法を描く」
といった感じで、作成した図をそのまま型紙として使おうとしているのです。
objPrt.DrawLine(30,30,100, 100)として描いてもそのとおりの図形にならないし、
書いた文字も意図する位置と違う位置に書けたりします。
位置、大きさ等の数字をmmで考え、それをそのままのプリンターで描けるようにする
ための換算方法があればご教授ください。
■No1984に返信(パオさんの記事)
e.Graphics.PageUnit = GraphicsUnit.Millimeter
で単位系を切り替えてdraw○○をすれば、指定座標はミリ換算になるようです。
e.Graphics.DrawString("20cm,10cmね。", defaultPrintFont, Brushes.Black, 200, 100)
で、20cm,10cmの位置に「20cm,10cmね。」と印字されると思いますが。

今自分のコードに強引に印字命令足して試しましたが、
ちゃんとしたサイズで描画できましたよ。
(解像度変えても大丈夫でした。)

Studioのヘルプだと、ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpguide/html/_gdiplus_types_of_coordinate_systems_about.htm
で一応例が載ってますね。

※当然、余白とかプリンタの印字可能領域等によるずれ分を考慮して左上点を
決める必要があります。
(左上点がどこでもいいのなら、0,0の位置から縦横に基準外枠を描画して、
この中が有効だよ、と知らしめれば0,0がどこでも良いことになりますが、
余白がプリンタ毎に異なって印刷されるのはさすがにみっとも良いとは
思わないので、ちゃんと処理した方がいいです・・・。特に、方眼紙に印刷
する場合は絶対に合わせないと方眼についた目盛とかに意味なくなりますし。)
■No1986に返信(こど。さんの記事)
> ■No1984に返信(パオさんの記事)
> e.Graphics.PageUnit = GraphicsUnit.Millimeter
> で単位系を切り替えてdraw○○をすれば、指定座標はミリ換算になるようです。
> e.Graphics.DrawString("20cm,10cmね。", defaultPrintFont, Brushes.Black, 200, 100)
> で、20cm,10cmの位置に「20cm,10cmね。」と印字されると思いますが。
>
> 今自分のコードに強引に印字命令足して試しましたが、
> ちゃんとしたサイズで描画できましたよ。
> (解像度変えても大丈夫でした。)
>
> Studioのヘルプだと、ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpguide/html/_gdiplus_types_of_coordinate_systems_about.htm
> で一応例が載ってますね。
>
> ※当然、余白とかプリンタの印字可能領域等によるずれ分を考慮して左上点を
> 決める必要があります。
> (左上点がどこでもいいのなら、0,0の位置から縦横に基準外枠を描画して、
> この中が有効だよ、と知らしめれば0,0がどこでも良いことになりますが、
> 余白がプリンタ毎に異なって印刷されるのはさすがにみっとも良いとは
> 思わないので、ちゃんと処理した方がいいです・・・。特に、方眼紙に印刷
> する場合は絶対に合わせないと方眼についた目盛とかに意味なくなりますし。)


「e.Graphics.PageUnit = GraphicsUnit.Millimeter」
 いろいろご指導ありがとうございました。
 これで解決の兆しが少し見えてきました。
 
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板