- PR -

Crystal Reportsを印刷ダイアログを介して印刷

1
投稿者投稿内容
てつ。(/o\)
会議室デビュー日: 2004/03/18
投稿数: 2
お住まい・勤務地: 東京都
投稿日時: 2004-03-18 22:36
皆様はじめまして。

現在VB.NETでのプログラム開発を行っているのですが、CrystalReportsから印刷が上手くいかず困っています。

ReportDocumentクラスのPrintToPrinterメソッドを実行すると、「通常使うプリンタ」から印刷されてしまうのが好ましくないので、印刷ダイアログを表示し、そこでプリンタの設定等を行い、その設定値をReportDocumentクラスに反映して印刷(PrintToPrinterメソッド)を行いたいと思っております。

その際、ReportDocumentクラスで設定した用紙サイズと用紙向きをデフォルト値としてPrinterSettingsクラスへ渡したいのですが、上手くいきません。

※その他にも、印刷ダイアログのプリンタプロパティで縮小印刷の設定をし印刷したいのですが、上手くいきません。

ご存知の方いらっしゃいましたら、お返事ください。

ぜひ皆様のお力をお借りしたく投稿いたしました。
どうかご教授くださいますよう、宜しくお願い致します。m(_ _)m

開発環境は、以下のとおりです。
・Win2000 Pro SP3
・VB.NET2003(Enterprise Architect)
・Crystal Reports for VS.NET 2003
・.NET Framework1.1
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 10:06
PrinterSettings.Papersizes←ReportDocument.PrintOptions.PaperSize
PrinterSettings.LandscapeAngle←ReportDocument.PrintOptions.PaperOrientation

ですか。おそらく2つを単純に「代入」することはできないでしょうから、Select Case文で分けるか、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8868&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7807&forum=7
このあたりのスレッドに出てくる「タイプコンバータ」を使えないでしょうか?


 「うまくいかない」…この場合、「ソースの書き方がわからない」「コンパイルが通らないが、エラーの意味がわからない」「コンパイルは通るが実行時にエラーが出て、エラーをどう直せばよいかわからない」「コンパイルは通り、実行時エラーも出ないが、期待したようにはならない」の4つが考えられます。それで最初の「ソースの書き方がわからない」と判断しましたが、よろしかったでしょうか?
てつ。(/o\)
会議室デビュー日: 2004/03/18
投稿数: 2
お住まい・勤務地: 東京都
投稿日時: 2004-03-19 10:54
Jittaさま、お返事ありがとうございます。

Jittaさまがおっしゃっている「タイプコンバータ」を行っているつもりなのですが、
期待しているような動きが見られません…

実際のソース(抜粋)を以下に記します。(ちょっと長いですが…)

要するに、CrystalReportViewerコントロール上の印刷ボタンをクリックしたときの
動作をこのコントロールを使わずに実現したいのです。

何度も申し訳ありませんが、ご教授くださいますよう、よろしくお願い致します。

Private m_htbPageMaping As New Hashtable
Private m_htbPageMaping01 As New Hashtable

Public Sub New()
PageMaping()
End Sub

Private Sub PageMaping()
  '
  ' .NetとCrystalReportの対応関係
  '
  m_htbPageMaping.Add("A3", CrystalDecisions.Shared.PaperSize.PaperA3)
  m_htbPageMaping.Add("A4", CrystalDecisions.Shared.PaperSize.PaperA4)
          :
          :
          :

  '
  ' .NetとCrystalReportの対応関係の逆関係
  '
  m_htbPageMaping01.Add("PaperA3", PaperKind.A3)
  m_htbPageMaping01.Add("PaperA4", PaperKind.A4)
          :
          :
          :
End Sub

Private Function ConvDotNetToCrystalReport(ByVal i_pageName As String) As CrystalDecisions.Shared.PaperSize
  If m_htbPageMaping.Contains(i_pageName) Then
    Return CType(m_htbPageMaping(i_pageName), CrystalDecisions.Shared.PaperSize)
  End If

  Return CrystalDecisions.Shared.PaperSize.DefaultPaperSize
End Function

Private Function ConvCrystalToDotNet(ByVal i_pageName As String) As PaperKind
  If m_htbPageMaping01.Contains(i_pageName) Then
    Return CType(m_htbPageMaping01(i_pageName), PaperKind)
  End If

  Return PaperKind.Custom
End Function

Public Sub SetupAndPrint(ByVal i_RepDoc As ReportDocument)
  Dim PrntDialog As New System.Windows.Forms.PrintDialog

  PrntDialog.PrintToFile = False
  PrntDialog.ShowNetwork = True
  PrntDialog.AllowPrintToFile = False
  PrntDialog.AllowSomePages = False
  PrntDialog.AllowSelection = False

  PrntDialog.Document = New PrintDocument

  '---------------------------------------------------
  ' ReportDocumentの情報をダイアログに反映する
  '---------------------------------------------------
  PrntDialog.PrinterSettings.DefaultPageSettings.PaperSize = PrntDialog.PrinterSettings.PaperSizes(Me.ConvCrystalToDotNet(i_RepDoc.PrintOptions.PaperSize.ToString))
  If i_RepDoc.PrintOptions.PaperOrientation = PaperOrientation.Landscape Then
    PrntDialog.PrinterSettings.DefaultPageSettings.Landscape = True
  ElseIf i_RepDoc.PrintOptions.PaperOrientation = PaperOrientation.Portrait Then
    PrntDialog.PrinterSettings.DefaultPageSettings.Landscape = False
  End If

  Dim ret As System.Windows.Forms.DialogResult
  ret = PrntDialog.ShowDialog

  '
  ' 渡したPrintDocument型(PrintDocumentから継承したクラス)、実際に出力する 
  '
  If ret = Windows.Forms.DialogResult.OK Then
    '-----------------------------------------------------------
    ' PrintDialogからの設定情報をReportDocumentに反映する
    '-----------------------------------------------------------
    i_RepDoc.PrintOptions.PaperSize = _
      ConvDotNetToCrystalReport(PrntDialog.PrinterSettings.DefaultPageSettings.PaperSize.Kind.ToString)

    i_RepDoc.PrintOptions.PaperOrientation = _
      CType(IIf(PrntDialog.PrinterSettings.DefaultPageSettings.Landscape, _
           CrystalDecisions.Shared.PaperOrientation.Landscape, _
           CrystalDecisions.Shared.PaperOrientation.Portrait), _
         CrystalDecisions.Shared.PaperOrientation)

    i_RepDoc.PrintOptions.PrinterName = PrntDialog.PrinterSettings.PrinterName
    Dim l_copys As Short = PrntDialog.PrinterSettings.Copies

    '-----------------------------------------------
    ' 全ての頁を印刷する
    '-----------------------------------------------
    i_RepDoc.PrintToPrinter(l_copys, False, 0, 0)
  End If
End Sub

_________________
1

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