DOBON.NET どぼん!のVB道掲示板(プログラム)過去ログ

画像の印刷位置

はじめまして。
まだ始めたばかりの初心者です。

VB.NETにおいて、拡大や縮小をして画像(PictureBox内のImage)を印刷するときに、
常に用紙の中心に印刷したいのです。
どのようにしたらよろしいのでしょうか。
ご教授願います。
よろしくお願いいたします。

<環境>
OS:Windows2000 / ツール:VisualBasic.NET
>はじめまして。
>まだ始めたばかりの初心者です。
>
>VB.NETにおいて、拡大や縮小をして画像(PictureBox内のImage)を印刷するときに、
>常に用紙の中心に印刷したいのです。
>どのようにしたらよろしいのでしょうか。
>ご教授願います。
>よろしくお願いいたします。
>
><環境>
> OS:Windows2000 / ツール:VisualBasic.NET

こんにちは。私は VisualBasic.NETを持っていないので、使っている
Image印刷手順を知らないのですが(.NET以前ならPaintPictureだった)、
用紙の中心というのが、本当の中心である場合と、印字可能領域の中心で
ある場合で異なってくるなあと思って、ひとつだけアドバイスします。

本当の中心を知るには、Windows APIを使って、プリンタの印字マージンを
取得しないとそもそも計算できません。
(でも、.NETはそれが簡単に出来るのかなあ?)

印字可能領域の中心であれば、それは簡単です。
領域のWidth, Heightを取得して(恐らく簡単に得られる)、
画像のWidth, Heightと比較して、印字開始位置を計算するだけです。
>こんにちは。私は VisualBasic.NETを持っていないので、使っている
>Image印刷手順を知らないのですが(.NET以前ならPaintPictureだった)、
>用紙の中心というのが、本当の中心である場合と、印字可能領域の中心で
>ある場合で異なってくるなあと思って、ひとつだけアドバイスします。
>
>本当の中心を知るには、Windows APIを使って、プリンタの印字マージンを
>取得しないとそもそも計算できません。
>(でも、.NETはそれが簡単に出来るのかなあ?)
>
>印字可能領域の中心であれば、それは簡単です。
>領域のWidth, Heightを取得して(恐らく簡単に得られる)、
>画像のWidth, Heightと比較して、印字開始位置を計算するだけです。

Kamali様。
はじめまして、マサシです。

ご丁寧な回答でご教授いただきありがとうございました。
私の行いたい作業は前者でありますので、
印字マージンの取得を調べてやってみたいと思います。
(ちなみに、VB自体はじめたばかりで、Windows APIという言葉すら知りませんでした。。m(_ _)m。。)
  • 題名: 回答:画像の印刷位置
  • 著者: Kamali
  • 日時: 2002/11/22 17:29:00
  • ID: 516
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
>Kamali様。
>はじめまして、マサシです。
>
>ご丁寧な回答でご教授いただきありがとうございました。

どう致しまして。具体性に乏しくて申し訳ないくらいで・・・

>私の行いたい作業は前者でありますので、
>印字マージンの取得を調べてやってみたいと思います。
>(ちなみに、VB自体はじめたばかりで、Windows APIという言葉すら知りませんでした。。m(_ _)m。。)

Windows APIの細かいことはとにかく、GetDeviceCaps()というAPIで
PHYSICALOFFSETX, PHYSICALOFFSETYという項目を取得すると、
それが左マージン、上マージンになります。
右と下は、
PHYSICALWIDTH, PHYSICALHEIGHTでいま選択している用紙(A4とかA3とか)
のサイズを取得して、そこから計算することになります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_88s3.asp

長さの単位がそのプリンタのドットを単位にしているので、
ドットの大きさを知る必要もあったかもしれません。
用紙の向きが縦か横かを意識する必要もあったかも知れません。
縦横を判断する方法もあります。
本気でやろうとすると骨の折れる仕事です。
頑張ってください。
  • 題名: 回答:画像の印刷位置
  • 著者: どぼん
  • 日時: 2002/11/24 2:25:00
  • ID: 527
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
>VB.NETにおいて、拡大や縮小をして画像(PictureBox内のImage)を印刷するときに、
>常に用紙の中心に印刷したいのです。
>どのようにしたらよろしいのでしょうか。
>ご教授願います。

実際にやってみたわけでないので間違っていたら申し訳ないですが、こんな感じで出来るのではと思うことを書かせていただきます。

.NETでの印刷はPrintDocumentクラスを使っており、実際の印刷をPrintPageイベントで行うとします。PrintPageイベントで渡されるPrintPageEventArgsクラスのPageBoundsプロパティでページ全体の大きさが取得できます。また印刷可能な範囲は同様にGraphicsクラスのVisibleClipBoundsプロパティで取得できます。さらにPrintPageEventArgsクラスのMarginBoundsプロパティではページ余白の内側の部分を表す領域を取得できます。

これらを使って中央に印刷できないものでしょうか?(.NETで印刷を行う時は大体こんな手順になるでしょうから、多分このようなことはご存知の上で質問されたと推測でき、これじゃ無理なのかなとも思いますが。)
  • 題名: 回答:画像の印刷位置
  • 著者: マサシ
  • 日時: 2002/11/25 11:12:00
  • ID: 530
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
Kamali様、どぼん様。

大変わかりやすいご回答ありがとうございました。
お二人の力をお借りしてなんとか中心への印刷ができました!!

それで、この作業の際に私はPrintDocumentControlで取得した内容を、PrintPreviewControlを用いてプレビュー表示をしながら行いました。
すると、画面上のプレビューを見てみるとほぼ中心なのに、
実際印刷してみると右にずれてました。
なので、プレビューの際に少々左に位置をずらして表示すると、
ほぼ中央に印刷できたのです。
これは一体なぜなんでしょうか??
私の操作の関係上かまたはVB.NET自体のバグ!?(~o~)

それはさておき、本題は解決できましたので、
大変感謝しております。
ありがとうございました!

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