- PR -

(プリンタ仕様としての)マージン取得方法

1
投稿者投稿内容
やまと
会議室デビュー日: 2003/08/21
投稿数: 11
投稿日時: 2003-11-30 14:51
お教えください。

図形やラベルなどを自作の編集画面上に配置し、
配置したものをプリントアウトできるツールのようなものを
作っています。

その中で、ユーザ指定マージンを指定できるようにして
いるのですが、プリンタの印字可能範囲を超えてマージンを
指定されてしまったときメッセージ等を出すようにしたいのです。
(たとえば、A社のプリンタではA4の縦でleft余白が6.35mm以下を
指定できないのに、ユーザが6mm を指定してしまった場合)

質問の本題ですが、
(ユーザの指定マージンではない)プリンタの仕様としての
マージンを取得するにはどのようにすればよいでしょうか?


system.drawing.printing.PrintDocument.DefaultPageSettings.Bounds
で取得しようとすると、これは ユーザ指定の印字可能範囲のようですし・・

よろしくお願いいたします。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2003-12-01 10:50
Hasumiです。

PrintDocumentクラスのPrintPageイベントで
コード:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
    Graphics g = e.Graphics;
    //左右の余白(mm単位)
    float printerMarginX = ((e.PageBounds.Width - g.VisibleClipBounds.Width) / 2F) * 0.254F;
    //上下の余白(mm単位)
    float printerMarginY = ((e.PageBounds.Height - g.VisibleClipBounds.Height) / 2F)  * 0.254F;
}


で取得できますがこの値は概略値です。(プリンタによっては左右でマージンが違う場合等もある)
正確に取得する場合はWin32APIのGetDeviceCapsを使用してみてください。
やまと
会議室デビュー日: 2003/08/21
投稿数: 11
投稿日時: 2003-12-01 12:28
Hasumi様、ご返答いただき大変ありがとうございます。

やはり正確な値を得るにはGetDeviceCaps使うしかないんですね

どうもありがとうございました。
1

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