[ ホーム ] [ PC技術/システム技術 ] [ VB.NETプログラミング ] [ VB.NETコンポーネント ] [ インフォメーション ]

上へ
色について
Pen
印刷の基本

VB.NET 解説

印刷の基本

最終更新:2006/09/14 修正

●はじめに

 .NETの印刷の基本は、まず印刷対象をドキュメントオブジェクトとして定義し、プリンタとの関連付けをプリンタ設定ダイアログで行う。これで、印刷したいドキュメントを具体的なプリンタ、紙サイズ、方向、解像度などを確定する。

●プリンタ設定ダイアログ、ドキュメントオブジェクト

 それぞれ、.NETコンポーネントなので、適当なフォームに貼り付けて使用する。互いに関連付けておく必要がある。

pdgMはプリンタ設定ダイアログ、pdcMはドキュメントオブジェクト

pdgM.Document = pdcM     '関連付けておく
pdgM.ShowDialog()            'これにておなじみのプリンタ設定ダイアログが表示される。

 ここで設定された各種パラメータは、PrinterSettings.DefaultPageSettings であり、それ以降の共通の設定となる。

 プリンタ設定ダイアログで、ユーザがキャンセル(中止)を選択した場合は、プリンタ設定ダイアログの戻り値で以下のように判明する。これは、WindowsDialog 共通である。

 Select Case pdgM.ShowDialog()
     Case DialogResult.OK, DialogResult.Yes
         ・・・・・・・・・ (処理継続)
     Case Else
         ・・・・・・・・・ (処理中止)

●印刷開始

 印刷開始は、Printメソッドである。

 pdcM.DocumentName = "適当な名称"     '印刷JOBに表示される
 pdcM.Print()              'これで、イベントが発生する

●印刷に関するイベント

ドキュメントオブジェクト(PrintDocument) から、以下の4つのイベントが生起される。

BeginPrint

 Printメソッドに対して一回だけ最初に発生する。ここで印刷のキャンセルができる。

 e.Cancel = True

QueryPageSettings

 各ページ印刷の開始前に発生する。もし、ページ毎にページ設定を変更したければここで行う。印刷のキャンセルも行える。 

   e.PageSettings.XXXXXX = YYYYYY など。DefaultPageSettings には影響しない。

PrintPage

 各ページ印刷の開始前に発生する。ここでも、ページ設定の変更はできるが、そのページは変わらなく、次のページから反映されるので、余り意味がない。QueryPageSettings にて変更すべきである。

 描画すべきGraphics が提供されるので、ここでそのGraphics に実際の印刷内容を描画する。 

Dim g As Graphics = e.Graphics
    ・・・・・・・・・・・・・・・ gに描画すれば印刷される。  

    e.HasMorePages = False     'Falseで印刷頁終了となる 。

 True とすれば、次のページ印刷に入り、QueryPageSettings が再び発生する。

EndPrint

 HasMorePage = False の場合、最後のページが完了した時発生する。

●印刷と解像度

 VB.NET では、プログラマに負担を掛けないよう、解像度と印刷サイズは自動変換される。何も設定しないで、普段通り描画すれば、

  • ピクセル単位は、1/100インチなる実空間サイズとして処理される。つまり、長さ 200 ピクセルの線は、200X(1/100) = 2 インチ の長さとして、プリンタの解像度に無関係に印刷される(無関係とはデタラメと言う意味ではなく、プリンタの解像度を考慮し、論理空間→実空間変換を自動的に行うと言う意味)。WIN32 では、この変換は自分で行う必要があった。
  • 画像の扱いも同じとなる。従って、実印刷サイズに従って、最適なサイズの原画を準備する。
  • ポイントで指定された文字サイズは、ポイントが維持される。ポイントは元々実空間単位(1/72インチ)なので、そのサイズ通り印刷される。

 結局、印刷では、1/100インチ単位で考えれば最も簡便になる。

●印刷プリビューダイアログ

 ドキュメントオブジェクトで設定された状態で印刷内容をシミューレーションし表示するもの。ページ切り替え、印刷などの制御もできる。シミュレーションは全自動なのでわざわざ描画する必要はない。実際には、ドキュメントオブジェクトのPrintPageイベント処理をフェッチし、プリンタの代わりに自分自身に描画するようになっている。印刷サイズは用紙サイズに対して相対的に完全に維持される。

prvT を印刷プリビューダイアログ、pdcT をドキュメントオブジェクトとすれば、基本的に、

prvT.Document = pdcT
prvT.ShowDialog()

で、印刷内容をプリビューできる。当然、pdcT に対する印刷(描画)処理ルーティンがあるのもとする。これは非常に便利なダイアログである。 表示位置などの制御もできる。

 複数ページの印刷では、その制御方法を考慮しないといけない。なぜなら、印刷プリビューダイアログにてイベント処理が実行されるので、本印刷時、特に、印刷プリビューダイアログからの印刷指示時、ページ制御がリセットされるように考慮する。このためには、BeginPrint イベントにて複数ページ印刷の初期設定を行う。

 印刷プリビューダイアログでのプリビューは、常に印刷と同じ処理が行われる。そのため、画像の高精細印刷などでは、ビットマップ処理が非常に重くなる。しかし、プリビューでは精々モニタの解像度なので、原画としては 1000X1000 程度で十分となる。必ず、プレビューを行うフローであれば、プレビュー時は軽い原画で行わせるなどすれば、高速化が図れる。

 印刷プリビューコントロールもある。これは、UI が全くなく、自分のフォームの中にプリビュー窓を組み込む場合などに利用する。

●プリンタ設定ダイアログなしでの設定

 プリンタ設定ダイアログなしでも印刷パラメータの設定は可能、またドキュメントオブジェクトもコントーロールを使用しないで直接オブジェクトを生成し、イベントハンドラを設定できる。

 しかし、最近のプリンタは複雑になっており、細かで高度な設定ができるようになっている。この場合は、メーカ提供の設定ダイアログでないと設定できないので、結局、プリンタ設定ダイアログ→メーカ設定ダイログと言う方法が良い。