cancel
Showing results for 
Search instead for 
Did you mean: 

CrystalReorts 印刷

former_member277269
Participant
0 Kudos

おはようございます。

いつもお世話になっております。

Visual Studio2012に以下からダウンロードしたファイルをインストールして開発しています。

ご質問ですが、VisualStudioでクリレポを印刷すると画面上で表示されてる通りに印刷出来ません。

例えば画面では横なのに印刷は縦になるとか、

連続紙で

印刷したいのに1ページごとにプリンターが止まり紙送りしません。

プリンターメーカー

に問い合わせ

すると

ソフトの

問題で

すと言われました。

なにかお気づきなどありましたら教えてください。

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

プレビュー表示後に印刷アイコンをクリックし、プリンタ選択することでレポートに保存されているプリンタ情報が初期化されてしまいます。回避策の一つとしては、使用プリンタ、用紙サイズ、印刷方向をデフォルトで設定してご利用いただくことになります。

また、印刷アイコンではなく、PrintToPrinter 関数を利用することも回避策になると思います。

Yoshi

Former Member
0 Kudos

以下のリンクのページに掲載されたサンプルコード (C#) のように記述します。

http://scn.sap.com/docs/DOC-28851

(記述例)
ReportDocument rpt = new ReportDocument();      
rpt.Load(Server.MapPath("ReportName"));              
System.Drawing.Printing.PrintDocument pDoc = new System.Drawing.Printing.PrintDocument();      
CrystalDecisions.Shared.PrintLayoutSettings PrintLayout = new CrystalDecisions.Shared.PrintLayoutSettings();      

System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();

printerSettings.PrinterName = "PinterName";
System.Drawing.Printing.PageSettings pSettings = new System.Drawing.Printing.PageSettings(printerSettings);

rpt.PrintOptions.DissociatePageSizeAndPrinterPaperSize = true;      
rpt.PrintOptions.PrinterDuplex = PrinterDuplex.Simplex;
rpt.PrintToPrinter(printerSettings, pSettings, false, PrintLayout);

プリンタへの印刷前に設定される項目としては、以下のものが考えられます。

プリンタ名 : printerSettings.PrinterName
部数   : printerSettings.Copies
用紙サイズ: pSettings.PaperSize
印刷方向 : pSettings.Landscape
スケール  : PrintLayout.Scaling

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takase

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、ご回答ありがとうございます。

お忙しいなか本当にありがとうございます。

しかし、C#は経験がなくわかりません。

Visual Studio Basicでのコーディングではどうなるのでしょうか。

Former Member
0 Kudos


以下のリンクのページの VB.NET (VB) Windows Sample Applications for use in Microsoft Visual .Net 2002 and Later(net_win_smpl.exe) に VB のサンプルアプリケーションがございますのでご参照ください。

http://wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports+for+.NET+SDK+Samples

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、教えてください。

教えていただいたサイトのサンプルファイルをみて、

色々と試してみました。

しかし、初心者の未熟者の私では、動作しませんでした。

以下が印刷条件です。

クリレポファイル:  C:\Reports\サンプル.rpt

プリンタ:  ネットワークプリンタ名が NetPR_3

指定用紙サイズ名称:  Seal

印刷方向:   縦

給紙方法:  プッシュトラクタ

以上なのですが、差支えなければ具体的なコードを教えていただけませんでしょうか。

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、教えてください。 教えていただいたサイトのサンプルファイルをみて、 色々と試してみました。 しかし、初心者の未熟者の私では、動作しませんでした。 以下が印刷条件です。 クリレポファイル:  C:\Reports\サンプル.rpt プリンタ:  ネットワークプリンタ名が NetPR_3 指定用紙サイズ名称:  Seal 印刷方向:  縦 給紙方法:  プッシュトラクタ 以上なのですが、差支えなければ具体的なコードを教えていただけませんでしょうか。

Former Member
0 Kudos

具体的にどのようなコード記述 (VB) で動作しないのかお知らせください。

Yoshi

former_member277269
Participant
0 Kudos

Yohi Takaseさん、いつもありがとうございます。

ド初心者のため、本当にご迷惑おかして申し訳ありません。

ご指導頂いたサンプルプログラム(PrintToPrinter.shi)を

デバックしボタンを選択すると添付ファイルのようなエラーが発生します。

Former Member
0 Kudos

以下のリンクのページから「VB.NET (VB) Windows Sample Applications for use in Microsoft Visual .Net 2002 and Later.」をクリックして、net_win_smpl.exe をダウンロードします。

http://wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports+for+.NET+SDK+Samples

以下のフォルダに解凍後、vbnet_win_printtoprinter.zip ファイルを解凍します。
C:\Crystal\CRNET

Microsoft Visual Stuido 2010(2012 が準備できていないため) でプロジェクトファイル (PrintToPrinter.sln) を開きます。

変換後、コード修正なしで、そのまま実行してプリンタへ印刷されることを確認しました。

このサンプルコードでは、コマンドボタンに以下の記述がございます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ''Create an instance of the Income Statement report.
        crReportDocument = New Income_Statement()

        ''Use error handling in case an error occurs
        Try
            ''Set the printer name to print the report to.  By default the sample
            ''report does not have a defult printer specified.  This will tell the
            ''engine to use the specified printer to print the report.  Print out
            ''a test page (from Printer properties) to get the correct value.
            crReportDocument.PrintOptions.PrinterName = "\\server\myprinter"

            ''Start the printing process.  Provide details of the print job
            ''using the arguments.
            crReportDocument.PrintToPrinter(1, True, 1, 1)

            ''Let the user know that the print job is completed.
            MessageBox.Show("Report finished printing!")

        Catch err As Exception
            MessageBox.Show(err.ToString())
        End Try

    End Sub

ご提示いだいたエラーですが、動作環境 (Windows)、Crystal Reports ランタイム、実行ファイルのそれぞれの 32 ビット、64 ビットに不一致が存在しないでしょうか?

ちなみ以下の環境でサンプルコードが動作しました。

- Windows 7 64bit

- VS 2010 コンパイルプラットフォーム AnyCPU

- SAP Crystal Reports runtime engine for .NET Framework (64-bit) 13.0.14.1720

- SAP Crystal reports, version for Microsoft Visual Studio 13.0.14.1720

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、いつもお世話になりありがとうございます。

私の環境は

Windows 8.1 64bit

Visual Studio 2013

Crystal Reportsランタイム32bit

対象のCPUは

AnyCPUでしたので

x86に変更するとコンパイルできました。

しかし、PrintReportボタンを選択すると以下のメッセージが表示されました。

former_member277269
Participant
0 Kudos

Yoshi Takaseさんいつもお世話になりありがとうございます。

先程はエラーが発生すると返信しましたが、何度かしていましたら無事にサプル帳票が

印刷されました。

帳票ファイル: C:\reports\sample.rpt

プリンタ名:  \\MYSERVER\NetPR_3

用紙サイズ: Seal

印刷方向: 縦

給紙方法: プッシュトラクタ

以上4つの設定するにはサンプルコードにどのように付け加えればいいですか?

Former Member
0 Kudos

以下のような記述を利用することになります。

(記述例)

crReportDocument = New ReportDocument

'レポート読み込み

crReportDocument.Load("C:\Income Statement.rpt")

'プリンタ名

crReportDocument.PrintOptions.PrinterName = "\\server\myprinter"

'用紙サイズ

crReportDocument.PrintOptions.PaperSize = PaperOrientation.Portrait

'印刷方向

crReportDocument.PrintOptions.PaperOrientation = PaperSource.Auto

'給紙方法

crReportDocument.PrintOptions.PaperSource = PaperSize.DefaultPaperSize

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、いつもお世話になりありがとうございます。

教えて頂いた通り、コーディングすると

思っているレポートファイルを指定のネットワークプリンターに印刷できました。

ただ、レポートファイルのデータが更新されていません。

(レポートファイルを作成した時のデータが印刷されている)

ユーザー名がUSER_1 で

パスワードがpassword_1 の時のレポートをリフレッシュするには

どのようなコードを追加すればいいでしょうか?

なんでも聞いてい申し訳ありませんが、もう少しお付き合いお願いいたします。

former_member277269
Participant
0 Kudos

先程の追記をさせていただきます。

データベースはORACLEです。

そしてデータベース名称は ORCL です。

よろしくお願いいたします。

Former Member
0 Kudos

以下のリンクのページサンプルコード (SAP Crystal Reports NET SDK Tutorial Sample Code.NET SDK Tutorial Sample Code.zip) がございますのでご参照ください。
http://scn.sap.com/docs/DOC-6948


この zip ファイルの以下のフォルダにデータベース接続するための記述例がございます。

Tutorial_Sample_Code\ViewerObjectModel\DBLogon\VB\VB_Win_CRVObjMod_DBLogon


これを参考にして以下のような記述で Oracle データベースに接続することができると思います。


(記述例)
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Dim crTableLogoninfo As New TableLogOnInfo()
Dim crConnectionInfo As New ConnectionInfo()

With crConnectionInfo
      .ServerName = "<サービス名>"
      .UserID = "<ユーザ名>"
      .Password = "<パスワード>"
End With

For i As Integer = 0 To crReportDocument.Database.Tables.Count - 1
    crTableLogoninfo = crReportDocument.Database.Tables(i).LogOnInfo
    crTableLogoninfo.ConnectionInfo = crConnectionInfo
    crReportDocument.Database.Tables(i).ApplyLogOnInfo(crTableLogoninfo)
Next

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takaseさんご回答ありがとうございます。 ご指示いただいたサンプルファイルおよび参考コードを参考に以下のように記述しましたが 印刷しても rptファイル作成した時の状態で印刷され、データを更新したものが印刷 されませんでした。 どの部分が間違っているのでしょうか? Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Public Class Form1     Inherits System.Windows.Forms.Form     ''CR Variables     Dim crReportDocument As ReportDocument #Region " Windows Form Designer generated code "     Public Sub New()         MyBase.New()         'This call is required by the Windows Form Designer.         InitializeComponent()         'Add any initialization after the InitializeComponent() call     End Sub     'Form overrides dispose to clean up the component list.     Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)         If disposing Then             If Not (components Is Nothing) Then                 components.Dispose()             End If         End If         MyBase.Dispose(disposing)     End Sub     Friend WithEvents Button1 As System.Windows.Forms.Button     'Required by the Windows Form Designer     Private components As System.ComponentModel.IContainer     'NOTE: The following procedure is required by the Windows Form Designer     'It can be modified using the Windows Form Designer.      'Do not modify it using the code editor.     Private Sub InitializeComponent()         Me.Button1 = New System.Windows.Forms.Button()         Me.SuspendLayout()         '         'Button1         '         Me.Button1.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))         Me.Button1.Location = New System.Drawing.Point(72, 64)         Me.Button1.Name = "Button1"         Me.Button1.Size = New System.Drawing.Size(144, 128)         Me.Button1.TabIndex = 0         Me.Button1.Text = "Print Report"         '         'Form1         '         Me.AcceptButton = Me.Button1         Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)         Me.ClientSize = New System.Drawing.Size(292, 273)         Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1})         Me.Name = "Form1"         Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen         Me.Text = "Print to Printer"         Me.ResumeLayout(False)     End Sub #End Region     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         ''Create an instance of the Income Statement report.         'crReportDocument = New Income_Statement()         'データベース更新(Start)         'Imports CrystalDecisions.CrystalReports.Engine         'Imports CrystalDecisions.Shared         Dim crTableLogoninfo As New TableLogOnInfo()         Dim crConnectionInfo As New ConnectionInfo()         crReportDocument = New ReportDocument         crReportDocument.Load("Z:\送り状.rpt")         With crConnectionInfo             .ServerName = "orcl"             .UserID = "USER"             .Password = "password1"         End With         For i As Integer = 0 To crReportDocument.Database.Tables.Count - 1             crTableLogoninfo = crReportDocument.Database.Tables(i).LogOnInfo             crTableLogoninfo.ConnectionInfo = crConnectionInfo             crReportDocument.Database.Tables(i).ApplyLogOnInfo(crTableLogoninfo)         Next         'データベース更新(End)         crReportDocument.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4         'crReportDocument.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPaperOrientation         'crReportDocument.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape '用紙の向きが横         crReportDocument.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait '用紙の向きが縦         crReportDocument.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto '給紙方法は自動         ''Use error handling in case an error occurs         Try             ''Set the printer name to print the report to.  By default the sample             ''report does not have a defult printer specified.  This will tell the             ''engine to use the specified printer to print the report.  Print out             ''a test page (from Printer properties) to get the correct value.             'crReportDocument.PrintOptions.PrinterName = "\\server\myprinter"             crReportDocument.PrintOptions.PrinterName = "\\FUKUIDBS.FUKUIPDC.FNS.LOCAL\NetPR_24"             'crReportDocument.PrintOptions.PaperSize = "A4"             ''Start the printing process.  Provide details of the print job             ''using the arguments.             crReportDocument.PrintToPrinter(1, True, 1, 1)             ''Let the user know that the print job is completed.             MessageBox.Show("Report finished printing!")         Catch err As Exception             MessageBox.Show(err.ToString())         End Try     End Sub End Class 以上、よろしくお願いいたします。

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、いつもお世話になりありがとうございます。

先程はデータが更新しないとのメールをお送りしましたが、

レポートをRefreshするコードを追加するとデータが更新されました。

お騒がせしました。

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、いつもお世話になりありがとうございます。

何度何度も教えていただき申し訳ないのですが、

追加した用紙サイズが補完リストに出てきません。

crReportDocument.PrintOptions.PaperSourcr = CrystalDecisions.Shared.[ここに追加した用紙サイズが入ってほしい]

どうしてでしょうか?

xiaoping_zheng
Employee
Employee
0 Kudos

Yamamoto様

お手数掛け致しますが、この追加のご質問について、
一つ新規スレッドの作成をご協力頂けますでしょうか。

現在のようなスレッド一つだけで複数のご質問は、スレッド自体も長くなり読み辛くなります。
一方、新規スレッドの作成より、読みやすくなり、Yoshiさん以外他の方から回答いただくこともあります。

また、もしこの前発生した現象は既に解決された場合、どの返信内容が役に立つかを今後確認できるため、お手数ですが、この前に返信内容下にある「Correct Answer」、「Helpful Answer」をクリックし、設定をお願いいたします。

以上、ご協力よろしくお願いいたします。

Xiaoping


Answers (1)

Answers (1)

Former Member
0 Kudos

レポートのデザイン時のページ設定やコードから印刷されるときのプリンタ関連の設定などを詳細にお知らせください。

former_member277269
Participant
0 Kudos

Yoshi Takaseさんお返事ありがとうございます。

不具合が発生しているレポートのページ設定は以下の通りになっています。

上部:0

左端:0.63

下部:0

右端:0.63

印刷されるときのプリンタ関連の設定ですが、知識不足で意味が理解できません。

どの部分をお知らせすればよいですか?

Former Member
0 Kudos

説明が不足して申し訳ございません。お聞きしたかったのは、レポートデザイン時のプリンタ指定有無、用紙サイズ、印刷方向、ページ余白、その他デフォルト設定以外の設定内容です。

それと、コード上でレポートを開いてから、プリンタへ印刷するまでにプリンタ名の指定、用紙サイズ指定等の印刷に必要な情報設定有無、設定されている場合、その記述内容などです。

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、お返事ありがとうございます。

レポートデザイン時の各設定は以下のようになっています。

プリンタ指定有無: 有

用紙サイズ    : 特殊サイズ(200×80)

印刷方向          : 縦

ページ余白    : 上部0 左端0.63 下部0 右端0.63

その他デフォルト設定以外の設定はございません。

以上となっていますが、何が原因でしょうか?

Former Member
0 Kudos

Visual Studio ではどの開発言語を利用して、どのような記述でプリンタへ印刷されていますでしょうか。

例えば、PrintToPrinter 関数の利用、あるいは、ビューアの印刷アイコンの利用等。

former_member277269
Participant
0 Kudos

Yoshi Takaseさんお返事ありがとうございます。

PrintToPrinter関数は使用していません。

ビューアぼ印刷ボタンを使用しています。

Former Member
0 Kudos

ビューアの印刷アイコンを利用した際には、プリンタの選択は行われていますか?
レポートをデザインしたときと同一プリンタは存在していますか?

Yoshi

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、お返事ありがとうございます。

>ビューアの印刷アイコンを利用した際には、プリンタの選択は行われていますか?

プリンタの選択がその都度行っています。

>レポートをデザインしたときと同一プリンタは存在していますか?

デザインには同一プリンタがあり、そのプリンタを選択して、レポートを保存したファイルです。

Former Member
0 Kudos

レポート表示後、プリンタ選択時に用紙サイズ、印刷方向を選択して印刷していると解釈して間違いございませんか?

また、用紙サイズ 200x80 は、横長の幅 200 で高さ 80 と解釈して間違いございませんか?

例えば、動作環境でレポート表示後、印刷アイコンをクリックしたときにデフォルトで表示されるように通常使うプリンタにレポートをデザインしたときのプリンタを設定し、用紙サイズ、印刷方向などもデフォルトで設定してお試しください。

印刷アイコンではなく、コード上で PrintToPrinter 関数を利用して本事象が解消できるかお試しください。

以下のリンクに PrintToPrinter 関数に関連する記事がございます。

http://scn.sap.com/docs/DOC-28851


また、以下のリンクの SCN サイトから類似の事例を検索してみてください。

http://scn.sap.com/community/crystal-reports-for-visual-studio

Yoshi


former_member277269
Participant
0 Kudos

Yoshi Takaseさん、大変お世話になりありがとうございます。

>レポート表示後、プリンタ選択時に用紙サイズ、印刷方向を選択して印刷していると解釈して間違いござい>ませんか?

はい。用紙サイズ、印刷方向は選択しています。

>また、用紙サイズ 200x80 は、横長の幅 200 で高さ 80 と解釈して間違いございませんか?

はい。

>例えば、動作環境でレポート表示後、印刷アイコンをクリックしたときにデフォルトで表示されるように通常使>うプリンタにレポートをデザインしたときのプリンタを設定し、用紙サイズ、印刷方向などもデフォルトで設定し>てお試しください。

使用プリンタ、用紙サイズ、印刷方向をデフォルトにすると正常に印刷されます。

>印刷アイコンではなく、コード上で PrintToPrinter 関数を利用して本事象が解消できるかお試しください。

試してみます。

former_member277269
Participant
0 Kudos

Yoshi Takaseさん、お返事遅れまして申し訳ありません。

PrintToPrinterで検索して、英語ばかりで面食らいましたが、

翻訳しながら頑張ってみましたが、どうもわかりませんでした。

PrintToPrinterを使用して、どのようなコーディングをすれば良いか

具体的に教えていただけないでしょうか。