Visual Basic 2005 Power Pack
Microsoft Printer Compatibility Library 1.0

Last Update : 2007/03/20


VB6からVB.NETへの変更は数多くあります。そのあたりは、Visual Basic 6.0 ユーザのためのVisual Basic .NET 移行ガイドに詳しく解説してあります。
その中で印刷関係は、最後の「その他の変更」の中に小さく言及されています。

まぁ確かに、日本の「罫線命」な帳票文化の中では、VB6のPrinterを素で使うケースは非常に少ないとは思います。
なんといっても、非常に面倒で手間もかかるわけなので、最悪でもクリスタルレポート、或いは他のサードパーティー製の帳票ツールを使用していたわけです。
ここでご紹介するのは、「こんなものもありますよ」ということです。


さて、Microsoft Printer Compatibility Library 1.0からダウンロードしたインストーラーでインストールします。そこで「参照」画面を開けると、以下のように表示されます。

上図で反転表示されているのが、今回のお題、Printer Compatibility Library です。これを参照設定に追加します。

さらに、コード内で、Import を追加します。
Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
これで準備は完了です。

ここで、ためしに何かを出力してみます。フォームを作成して、"cmdPrintObjectExec"というボタンを作成しました。
中のコードはこんな感じです。

Private Sub cmdPrintObjectExec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrintObjectExec.Click
 Dim objPrinter As Printer
 objPrinter = New Printer
 objPrinter.Orientation = vbPRORLandscape

 objPrinter.Line(500, 1250, 10000, 1250, vbBlue)

 objPrinter.CurrentX = 1000
 objPrinter.CurrentY = 1000
 objPrinter.Print("test from VB Powerpack [Printing]")

 objPrinter.CurrentX = 1000
 objPrinter.CurrentY = 2500
 objPrinter.Circle(2000, 5000, 1000, vbRed)

 objPrinter.EndDoc()

End Sub

中身はVB6ですよといわれても、素直に信じそうなソースコードになりました。
これで出力されたモノのイメージは、こんな感じです。

さて、これでは面白くないので、ほぼ同じ事をVB.NETでやったらどうなるか。

Private Sub cmdExecPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExecPrint.Click
 Dim objPrint As Printing.PrintDocument = New Printing.PrintDocument
 objPrint.DefaultPageSettings.Landscape = True
 AddHandler objPrint.PrintPage, AddressOf Me.printPage
 objPrint.Print()
 objPrint.Dispose()
End Sub

Private Sub printPage(ByVal sender As Object, ByVal printerArgs As Printing.PrintPageEventArgs)
 printerArgs.Graphics.DrawLine(Pens.Blue, 50, 125, 1000, 125)
 Dim objFont As Font = New Font("MSゴシック", 10, FontStyle.Regular)
 printerArgs.Graphics.DrawString("test from .NET Framework Printing.PrintDocument ", objFont, Brushes.Black, 100, 100)
 printerArgs.Graphics.DrawArc(Pens.Red, 200, 500, 200, 200, 0, 360)
 printerArgs.HasMorePages = False
End Sub

こんな感じのコードになります。
たしかに、オブジェクトモデルが全然違うというのが実感できます。
ただし、座標位置とかはズレてますので、ご注意ください。

 

注)同梱されているドキュメントにも書いてありますが、Circle , Line , PSet において、メソッドの引数が変更されている(省略可能だったものが不可になった)ので、ご注意ください。
 

戻る