- - PR -
用紙上の座標を指定して印刷した場合の計算式について
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-27 18:38
例えば、あるサイズの用紙上に○×○枚配置されたラベルに対して印刷を行おうと思った場合、各ラベルの左上座標を取得しなければなりません。
そして、左上座標を得るためには、ラベルの正確な高さと幅のサイズを取得する必要があります。 指定する値は、上下左右の各余白のサイズと、○×○枚という値です。 この場合、各引数の関係は次のようになるかと思います。 ラベル高 = ((用紙縦サイズ - (上余白 + 下余白)) / 縦ラベル数) ラベル幅 = ((用紙横サイズ - (左余白 + 右余白)) / 横ラベル数) この計算を実現するには、どのようなプロパティを使えば良いのかわからなくなっております。 用紙サイズ、上下左右の余白を指定することで、実際に印刷できるエリアを取得するには、どのような方法を使えば良いのでしょうか? 実際に印刷しているのですが、どうしてもズレが生じてしまいます。 上下左右には、PrintDocument.DefaultPageSettings.Margins によって1/100インチで指定しております。 この状態で、実際に印刷できる範囲を取得するには、単純に PrintableArea や Boundsプロパティを参照しただけではダメなのでしょうか? [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-05-27 18:51 ] | ||||||||||||||||
|
投稿日時: 2006-05-27 19:19
NAL-6295です。
計算式を複雑にしなくても、 最初の1枚目のラベルの用紙に対するTopとLeftを計測して、 横のラベルのLeftを計測して、 下のラベルのTopを計測すれば、 最初の1枚目のラベルとの差が計測できるので、 それを利用すれば、 最初の1枚目のラベルの印刷開始位置をスタートにして 等間隔に印刷できませんか? もし、意味を取り違えていたら申し訳ありません。 _________________ 「伝える」とは「人に云う」と書く。 http://d.hatena.ne.jp/NAL-6295/ | ||||||||||||||||
|
投稿日時: 2006-05-27 19:30
ありがとうございます。 僕もそうしたいのですが、用紙タイプは変わる恐れがあるので、余白と縦横ラベル数で何とかしたいのです。 | ||||||||||||||||
|
投稿日時: 2006-05-27 22:30
まず、"○×○枚配置された" がよくわからないのですが...
正確には取得できませんので、この時点で不可能な仕様です。
と仰っていますが、「プリンタ ドライバが変わる恐れ」は考えていないのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-05-28 09:15
すみません。わかりにくかったですね。 2列5行で10枚のラベルという意味です。
僕の考えている仕様としては、次のようになります。 与えるパラメーターは、余白(上)・余白(下)・余白(左)・余白(右)、ラベル列数・ラベル行数です。 これは設定ファイルのようなものを用意してユーザーに編集してもらおうと思っています。 プリンタードライバの変更に関しては、ある程度の誤差を実値を見ながら余白にて調整しようと思っています。 実際に印刷した結果で全体的に2ミリ右にズレが生じている場合は、左の余白−2ミリ、右の余白+2ミリとして調整します。 例えば、ラベルの間に数ミリのマージンがある場合と、ラベルがぴったりくっついている場合もありますが、例えば、5ミリのマージンなら、右の余白を5ミリ削れば良いだろうと考えています。
プリンタドライバからは、デッドスペースの情報が得られるかな?、と思っていますが実際どうなんでしょうか? VB6で、このような場合は、次のコードを書いていました。
以上から、後は計算すれば全て算出できるので・・・ | ||||||||||||||||
|
投稿日時: 2006-05-28 11:18
印刷域を得るには、次のようにすれば良かったみたいです。
但し、Margin プロパティに予め値を入れておくということと、その値はデッドスペース以上の値でなければいけないという前提付きです。
ちなみに、「ここ!!」の部分ですが、値の入れ替えって、もっと簡単な方法はないんですかね? |
1