on 08-18-2015 6:04 AM
こんにちは。
Crystal Reportsで作成したレポートを
Visual Studio 2013 で印刷する簡単なプログラムを作成しています。
プリンタ出力用紙が特殊でしたのでWindows上で用紙を追加したのですが
crReportDocument.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.
の補完機能で追加した用紙が表示されません。
どのようにして用紙を指定すればよいのでしょうか。
コードの抜粋を添付いたします。
******************************************
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click |
Dim sBuff As String | |
sBuff = Command() |
Label1.Text = "Z:\送り状.rpt" |
'データベース更新(Start) | |
Dim crTableLogoninfo As New TableLogOnInfo() | |
Dim crConnectionInfo As New ConnectionInfo() |
crReportDocument = New ReportDocument | |
crReportDocument.Load(Label1.Text) |
With crConnectionInfo | |
.ServerName = "orcl" | |
.UserID = "USER" | |
.Password = "password1" | |
End With |
crReportDocument.Refresh() |
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 '用紙サイズがA4 | |
crReportDocument.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait '用紙の向きが縦 | |
crReportDocument.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto '給紙方法は自動 |
Try | |
crReportDocument.PrintOptions.PrinterName = "\\serverDBS.LOCAL\NetPR_3" | |
crReportDocument.PrintToPrinter(1, True, 1, 1) |
MessageBox.Show("Report finished printing!") |
Catch err As Exception | |
MessageBox.Show(err.ToString()) | |
End Try | |
End Sub |
貴重な情報を取得いただき誠にありがとうございます。
.NET アプリケーションの PrintToPrinter 関数からご利用いただいているプリンタ (NEC Multi Impact 700JAN) に対して定型用紙サイズ (A4、B4 等) でも正常に印刷することができないとご報告いただきました。
PrintToPrinter 関数は、以下のコード記述をご利用いただいておりますが、
crReportDocument.PrintToPrinter(Single.Parse(TextBox1.Text), False, 1, 9999)
以下の引数に置き換えてお試しください。
(記述例)
Dim printerSettings As New System.Drawing.Printing.PrinterSettings
Dim pageSettings As New System.Drawing.Printing.PageSettings
Dim layoutSettings As New CrystalDecisions.Shared.PrintLayoutSettings
(省略)
printerSettings.PrinterName = "プリンタ名"
crReportDocument.PrintToPrinter(printerSetting, pageSettings, false, layoutSettings)
また、以下の SAP Knowledge Base Article(KBA) に添付されたサンプルプログラムを利用して今回のレポートをプリンタへの印刷をお試しください。
2163438 - How do I make Crystal Reports for Visual Studio print my reports? (https://service.sap.com/sap/support/notes/2163438)
手順は、以下のとおりです。
1. 開発環境で添付されたプロジェクト (C#) を開き、再ビルドしてから実行します。
【プレビュー表示後のビューアからプリンタへの印刷】
2. [open rpt] をクリックして、該当レポートファイルを選択してから [Open] をクリックします。
3. [View Report] をクリックすることでビューアにレポートが表示されます。
4. [Viewer Print Mode] は、"PrintToPrinter" が選択されておりますが、ここでビューアの [Print Report] アイコンをクリックします。
5. [Viewer Print Mode] は、"PrintOutputController" を選択して、ビューアの [Print Report] アイコンをクリックします。
6. この印刷設定画面でプリンタ、用紙サイズ、給紙方法を選択してからプリンタへ印刷します。
以下の⑪⑫の事象発生有無と連続印刷が可能であるかご確認ください。
⑪プレビュー表示後の印刷では、印字サイズが小さくなる。
⑫プレビュー表示後の印刷では、印刷方向が逆になる。
【コードから直接プリンタへの印刷】
7. [Close rpt] をクリックして、開いているレポートを閉じます。
8. 再度、[open rpt] をクリックして、該当レポートファイルを選択してから [Open] をクリックします。
9. [Printer] からプリンタを選択し、[paper] の [size] と [source] からそれぞれ用紙サイズと給紙方法を選択します。
10. [Set Printer] をクリックします。
11. [POController] をクリックします。 PrintToPrinter 関数ではなく、PrintOutputController を利用してプリンタへ印刷することになります。
なお、[P 2 P] は、PrintToPrinter 関数を利用したコード記述になります。
それぞれの関数でプリンタへの印刷をお試しいただき、本件の事象発生有無をご確認ください。
Yoshi
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
ご存知のことと思いますが、カスタム用紙サイズを定義した場合、その値 (ENUM) は動作環境により異なる値が設定されます。従いましてカスタム用紙サイズをご利用いただいている場合、それぞれの動作環境で値を取得して設定する必要がございます。
(記述例) crReportDocument.PrintOptions.PaperSize = CType(119, PaperSize)
上記例は、119 がカスタム用紙サイズの値を示しています。但し、動作環境により同一カスタム用紙サイズでも異なる値で割り振られていることがございます。
Google 等でご利用環境の用紙サイズの値 (Enum) を取得するコードを検索することができます。
(記述例)
Dim i As Integer
Dim doctoprint As New System.Drawing.Printing.PrintDocument()
doctoprint.PrinterSettings.PrinterName = "EPSON DLQ-3500 ESC/P 2 Ver 2.0"
For i = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1
Dim rawKind As Integer
If doctoprint.PrinterSettings.PaperSizes(i).PaperName = "seal" Then
rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i)))
crReportDocument.PrintOptions.PaperSize = rawKind
Exit For
End If
Next
Yoshi
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Yoshi Takaseさん、いつもお世話になりまして本当にありがとうございます。
ご指示頂いた通りすると、用紙サイズを設定できました。
しかし、連続紙を印刷しているのですが
1枚目は印刷されますが、印刷後、止まってしまい、
2名目以降が連続して印刷されません。
ちなみに、同様のレポートファイルをCrystal Reportsで印刷すると問題なく連続で印刷されます。
試している Visual Basic のコードは以下の通りです。
*************************************************************
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click |
crReportDocument = New ReportDocument |
Dim i As Integer | |
Dim pSize As Integer | |
Dim doctoprint As New System.Drawing.Printing.PrintDocument() |
doctoprint.PrinterSettings.PrinterName = "\\myServer\NetPR_24" |
For i = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1 | |
Dim rawKind As Integer |
If doctoprint.PrinterSettings.PaperSizes(i).PaperName = "seal" Then | |
rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i))) |
crReportDocument.PrintOptions.PaperSize = rawKind | |
'crReportDocument.PrintOptions.PaperSize = CType(119, PaperSize) |
pSize = rawKind |
Exit For |
End If | |
Next |
Dim sBuff As String | |
sBuff = Command() |
Label1.Text = "Z:\現品票.rpt" |
'データベース更新(Start) | |
Dim crTableLogoninfo As New TableLogOnInfo() | |
Dim crConnectionInfo As New ConnectionInfo() |
crReportDocument = New ReportDocument | |
crReportDocument.Load(Label1.Text) |
With crConnectionInfo | |
.ServerName = "orcl" | |
.UserID = "USER" | |
.Password = "password" | |
End With |
crReportDocument.Refresh() |
For ii As Integer = 0 To crReportDocument.Database.Tables.Count - 1 | |
crTableLogoninfo = crReportDocument.Database.Tables(ii).LogOnInfo | |
crTableLogoninfo.ConnectionInfo = crConnectionInfo | |
crReportDocument.Database.Tables(ii).ApplyLogOnInfo(crTableLogoninfo) | |
Next | |
'データベース更新(End) |
'用紙サイズ | |
'crReportDocument.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4 '用紙サイズがA4 | |
'crReportDocument.PrintOptions.PaperSize = CType(pSize, PaperSize) | |
crReportDocument.PrintOptions.PaperSize = CType(pSize, CrystalDecisions.Shared.PaperSize) |
'用紙の向き | |
'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 '給紙方法は自動 | |
crReportDocument.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Tractor '給紙方法はトラクター |
Try | |
'出力先プリンタ | |
crReportDocument.PrintOptions.PrinterName = "\\myServer\NetPR_24" |
'印刷 | |
'第一引数は印刷する部数、第二引数は部単位に印刷するかどうか、第三引数は印刷を開始するページ番号、第四引数は印刷を終了するページ番号 | |
'なお、全部のページを印刷する場合は第三と第四の引数に0をセットします。 | |
'crReportDocument.PrintToPrinter(Single.Parse(TextBox1.Text), True, 0, 0) | |
crReportDocument.PrintToPrinter(Single.Parse(TextBox1.Text), False, 1, 9999) |
MessageBox.Show("Report finished printing!") |
Catch err As Exception | |
MessageBox.Show(err.ToString()) | |
End Try |
End Sub |
製品版 Crystal Reports XI R2(11.5.x) をご利用いただいているとご連絡いただきました。
製品のライフサイクルは終了しておりますので、製品版のアップグレード、または、SAP Crystal Reports for Microsoft Visual Studio に置き換える必要がございます。
また、レポート修正は、引き続き Crystal Reports XI R2(CRW32.exe) で実施されているのでしょうか。
その場合、レポート作成時のバージョンとそのファイルを読み込み、表示、印刷しているエンジンのバージョン (13.x) が異なっております。
以下のリンクのページにマトリックスがございますのでご確認ください。
http://scn.sap.com/community/crystal-reports-for-visual-studio/blog/2013/06/28/how-do-you-spell-conf...
また、以下のリンクのページから SAP Crystal Reports for Microsoft Visual Studio(13.0.14.1720) をダウンロードされている場合、既存 rpt ファイルを最新バージョンに変換して本件の事象が解消できるかお試しください。
http://scn.sap.com/docs/DOC-7824
なお、変換前には、バックアップを取得することをお勧めいたします。
Yoshi
Yoshi Takaseさん、いつもお世話になりありがとうございます。
既存のrptファイルを最新バージョンに変換保存しましたが
現象に変化がありませんでした。
ちなみにSupport Pack 12 (v.13.0.12.1494)の32bit版を利用しています。
ちょっと気になる点を発見しました。
それは、連続紙をトットプリンタにセットし、用紙の頭出しをし、データ待ちの状態で、
PrinToPrinterでデータを送ると、用紙が一旦退避します。
退避してしまうというのは、正常な印刷データが送られていないのでしょうか?
例えば、給紙方法など・・・
再度、確認させていただきますが、本事象(2ページ目以降が印刷されない)は、開発、ランタイム環境のどちらでも発生すると解釈して間違いございませんか。
その場合、前に提示させていただいた開発環境 (IDE) のプロジェクト内のデザイナからレポートをプレビュー表示後、印刷アイコンのクリックで印刷されたときにも同様な現象が発生いたしますか。
また、PrintToPrinter 関数の第四引数には、「9999」 ではなく、2 または、3 を指定して 2 ページ目以降が印刷されるかご確認ください。
現状のプログラムは、プレビュー表示なしで、直接プリンタへ印刷が行なわれておりますが、プレビュー表示されてから印刷アイコンのクリックで印刷された場合、本事象が発生するかご確認ください。
Yoshi
いつもお世話になりありがとうございます。
2枚目以降のデータは生成されています。
しかし、いったん連続紙が退避するので再度頭だしすると
印刷すると1枚目と印字位置が重なります。
開発環境、ランタイム環境共に現象んは同じです。
デザイナーの付属のプレビューし、印刷ボタンを押した時は
連続して印刷されます。
しかし、印字サイズが豆粒のようになったり、
印字方向が逆になったりします。
PrintToPrinterの引数ですが
第4引数を2や3にしてもは変化はありませんでした。
第3、第4引数を0にしても同様でした。
プリンターの給紙方法の設定がおかしいのでしょうか。
プリンター番号のような取得方法はあるのでしょうか。
今までのご連絡いただいた内容を整理しながら、いくつかのことを確認させていただきます。
①ユーザ定義の用紙サイズの指定方法をご質問いただきました。
Q: この時点でプリンタへ印刷したときにはすべてのページが印刷されていたのでしょうか。
②ユーザ定義の用紙サイズの指定方法の提示後(修正後)、用紙サイズの設定ができた。
Q: この時点で、2 ページ以降が正常に印刷されなくなったのでしょうか。
③Crystal Reports XI Release 2(CRW32.exe) から正常に連続印刷できる。(ユーザ定義の用紙サイズ、印刷方向、プリンタ名 に問題なし)
④CRW32.exe とアプリケーション(PrintToPrinter) の印刷された文字の大きさの違いを確認する。
⑤コード上の給紙方法 (crReportDocument.PrintOptions.PaperSource) を変更しても事象に変化なし。
Q: この時点の事象は、2ページ以降が正常に印刷されていないと解釈して間違いございませんか。
⑥レポートを Crystal Reports XI Release 2 から SAP Crystal Reports for Microsoft Visual Studio に変換する。
Q: 具体的にどのような手順を実施されましたでしょうか。
⑦新たな発見として、PrinToPrinter の実行で用紙が一旦退避する。
Q: この時点以降の事象は、用紙が退避して、次ページが重なって印刷されていると解釈して間違いございませんか。
⑧開発、ランタイム環境のどちらも用紙が退避して、次ページが重なって印刷されている。
⑨最新版 (13.0.12.1494) SAP Crystal Reports for Microsoft Visual Studio をインストールする。
⑩デザイナーの付属のプレビューし、印刷ボタンを押した時は連続して印刷される。
Q: Visual Studio のプロジェクト内のデザイナからのプレビュー表示と解釈して間違いございませんか。
⑪プレビュー表示後の印刷では、印字サイズが小さくなる。
⑫プレビュー表示後の印刷では、印字方向が逆になる。
Q: 印刷方向が逆とはどのような印刷になるのでしょうか。
用紙の向きが「横」や「縦」と表現しますが、「逆」は、文字が逆さまに印刷されて出力されるのでしょうか。
ドットプリンタなので印字は「左から右」に読めますが、「右から左」に読むような形式で印刷されるのでしょうか。
⑪PrintToPrinter にページ指定しても用紙が退避して次ページが重なって印刷される。
上記内容に漏れや誤りがございましたら、ご指摘ください。
また、上記の確認事項についてご回答ください。
次に問題箇所を切り分けのために PrintToPrinter 経由でユーザ定義の用紙サイズ以外の用紙サイズで正常に連続印刷ができるかご確認ください。
また、可能であれば、Crystal Reports コンポーネントやレポートを利用しないアプリケーション経由で同一プリンタにユーザ定義の用紙サイズで連続印刷できるかご確認ください。
Yoshi
Yohi Takaseさん、お返事遅れまして申し訳ありません。
ちょっと体調を崩しましてお休みしていました。
再度、確認いたしました。
①ユーザ定義の用紙サイズの指定方法をご質問いただきました。
Q: この時点でプリンタへ印刷したときにはすべてのページが印刷されていたのでしょうか。
A: 文字が小さくなったり、縦横が逆になったりしますが、全ページ印刷されます。
②ユーザ定義の用紙サイズの指定方法の提示後(修正後)、用紙サイズの設定ができた。
Q: この時点で、2 ページ以降が正常に印刷されなくなったのでしょうか。
A: PrintToPrinterからは全ページ印刷されます。
しかし。1ページ目を印刷し、用紙が退避するため、1ページ目をミシン目から切り落とさず
紙送りをすると1ページ目と重複してしまします。(2ページ目以降同様)
③Crystal Reports XI Release 2(CRW32.exe) から正常に連続印刷できる。(ユーザ定義の用紙サイズ、印刷方向、プリンタ名 に問題なし)
A: 問題なく印刷されます。
④CRW32.exe とアプリケーション(PrintToPrinter) の印刷された文字の大きさの違いを確認する。
A: 若干小さいです。
⑤コード上の給紙方法 (crReportDocument.PrintOptions.PaperSource) を変更しても事象に変化なし。
Q: この時点の事象は、2ページ以降が正常に印刷されていないと解釈して間違いございませんか。
A: はい。2ページ以降が正常に印刷されません。(用紙が退避する。)
⑥レポートを Crystal Reports XI Release 2 から SAP Crystal Reports for Microsoft Visual Studio に変換する。
Q: 具体的にどのような手順を実施されましたでしょうか。
A: SAP Crystal Reports for Microsoft Visual Studioのクリレポファイルをプレビューして
EXPORTで保存しました。
⑦新たな発見として、PrinToPrinter の実行で用紙が一旦退避する。
Q: この時点以降の事象は、用紙が退避して、次ページが重なって印刷されていると解釈して間違いございませんか。
A: はい。一旦退避して、紙送り後(手動)、重なって印刷されていました。
⑧開発、ランタイム環境のどちらも用紙が退避して、次ページが重なって印刷されている。
A: どちらも同様です。
⑨最新版 (13.0.12.1494) SAP Crystal Reports for Microsoft Visual Studio をインストールする。
A: 最新のランタイムをインシトールして行いましたが、状況に変化はありませんでした。
⑩デザイナーの付属のプレビューし、印刷ボタンを押した時は連続して印刷される。
Q: Visual Studio のプロジェクト内のデザイナからのプレビュー表示と解釈して間違いございませんか。
A: はい。
⑪プレビュー表示後の印刷では、印字サイズが小さくなる。
A: 小さくなったり、縦横が逆になったりします。
⑫プレビュー表示後の印刷では、印字方向が逆になる。
Q: 印刷方向が逆とはどのような印刷になるのでしょうか。
用紙の向きが「横」や「縦」と表現しますが、「逆」は、文字が逆さまに印刷されて出力されるのでしょうか。
ドットプリンタなので印字は「左から右」に読めますが、「右から左」に読むような形式で印刷されるのでしょうか。
A: 文字が縦とは-90度回転(時計回り)して印刷されます。
⑪PrintToPrinter にページ指定しても用紙が退避して次ページが重なって印刷される。
A: はい。
次に問題箇所を切り分けのために PrintToPrinter 経由でユーザ定義の用紙サイズ以外の用紙サイズで正常に連続印刷ができるかご確認ください。
A: A4、B4でも同様でした。
また、可能であれば、Crystal Reports コンポーネントやレポートを利用しないアプリケーション経由で同一プリンタにユーザ定義の用紙サイズで連続印刷できるかご確認ください。
A: コーディングが解らず、できませんでした。
Visual Studio 内で同一ユーザ定義の用紙サイズでシンプルなレポートを新規作成した場合、2ページ以降が正常に印刷できない事象が発生するかご確認ください。
A: 状況に変化はございませんでした。
以上、現在の状況報告をさせていただきました。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.