- PR -

CrystalReport ReportViewer から呼び出したプリンタ一覧ダイアログを制御する方法は?

1
投稿者投稿内容
stein
会議室デビュー日: 2005/01/28
投稿数: 1
投稿日時: 2005-01-28 20:52
はじめまして。

環境: VB.NET 2003
CrystalReport: VS.NET Enterprise 2003同梱

下記参考文献や、BusinessObjects (英語)のサンプルなどを見ても解決しない問題があります。

問題:
コーディング上では、CrystalReportに対して、『通常使うプリンター』以外の任意のプリンターをセットすることができました。
PrintToPrinter()で、正しく、出力したいプリンターに出力されることは確認できています。

ところが、ReportViewerの上側のツールバーに並んでいる、[プリンタ検索]ボタンをクリックして出てくるダイアログで、初期セットされているのが、常に『通常使うプリンター』となってしまいます。
これを『通常使うプリンター』以外の任意のプリンターが初期セットされた状態にする方法はあるのでしょうか?

ちなみに…
・Windows上に、ページプリンタやインクジェットプリンタやドットインパクトプリンタが接続、ドライバも適切に登録済
・Windows上では、ドットインパクトプリンタ以外を『通常使うプリンター』に設定
・CrystalReport側では、ドットインパクトプリンタに出力したい
・Windows上の『通常使うプリンター』設定は一切いじらないこと
…という条件なんです。

VB6時代では、ごく簡単にできたんですが……


参考文献:
『ひと目でわかる Microsoft VisualBasic .NET データベース開発入門』
http://www.amazon.co.jp/exec/obidos/ASIN/4891004045/


=====================
該当フォームでのソースを貼り付けます。

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Data
Imports System.Data.OleDb

public class プレビュー用フォーム
Inherits System.Windows.Forms.Form

Dim adoOleDbConn As System.Data.OleDb.OleDbConnection
Dim adoOleDbDA As System.Data.OleDb.OleDbDataAdapter
Dim dataSet As System.Data.DataSet

Private Sub プレビュー用フォーム_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load
'サンプル“vbnet_win_adodotnet”を参照

'接続文字列を用いて、接続を生成し、開く
adoOleDbConn = New System.Data.OleDb.OleDbConnection("接続文字列")

'SQL文を構成し、データソースを query する
Dim strSql As String = ""
strSql = gstrSqlForDataSet

'SQL文と既存の接続を利用して、データを retrieve する
adoOleDbDA = New System.Data.OleDb.OleDbDataAdapter(strSql, adoOleDbConn)

'データセットのインスタンスを生成する
dataSet = New System.Data.DataSet

dataSet.Clear()

'retrieve したデータで、データセットを満たす
'データセット中のテーブル名は、レポート中のテーブルと同じこと!
adoOleDbDA.Fill(dataSet, "テーブル名")

'strongly-typed なレポートオブジェクトのインスタンスを生成する
Dim crRptFile As New CrystalDecisions.CrystalReports.Engine.ReportDocument
crRptFile.Load("RPTファイルへのフルパス")

'populate 済みのデータセットをレポートに pass する
crRptFile.SetDataSource(dataSet)

Dim i As Integer
Dim strInstalledPrinterName As String
With Me.PrintDialog1.PrinterSettings
For i = 0 To (.InstalledPrinters.Count - 1)
strInstalledPrinterName = .InstalledPrinters.Item(i)
If StrConv(strInstalledPrinterName, VbStrConv.UpperCase) = StrConv("出力先プリンター名", VbStrConv.UpperCase) Then
'指定プリンタが存在する
crRptFile.PrintOptions.PrinterName = strInstalledPrinterName
Exit For
End If
Next
End With

With crRptFile.PrintOptions
.PaperOrientation = pfGetOutputPaperOrientation(gintOutputPaperOrientation) 'レポートの向き
.PaperSource = pfGetOutputPaperSource(gintOutputPaperSource) 'プリンタの給紙方法
.PaperSize = pfGetOutputPaperSize(gintOutputPaperSize) '用紙サイズ
End With

'viewer に、プレビューしたいレポートオブジェクトをセットする
レポートビューワ.ReportSource = crRptFile

End Sub
end class
1

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