cancel
Showing results for 
Search instead for 
Did you mean: 

プリンター出力用紙サイズについて

former_member277269
Participant
0 Kudos

こんにちは。

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

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

貴重な情報を取得いただき誠にありがとうございます。

.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

Former Member
0 Kudos

ご存知のことと思いますが、カスタム用紙サイズを定義した場合、その値 (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

former_member277269
Participant
0 Kudos

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
former_member277269
Participant
0 Kudos

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

もう一点気になることが発生しました。

PrintToPrinterで印刷された連続紙の1枚目の文字の大きさが、

Crystal Reportsを使って印刷したものと比較して

小さいです。 もちろん同じファイルで比較しています。

Former Member
0 Kudos

念のために確認させていただきますが、『Crystal Reports で印刷』とは、製品版の Crystal Reports 単体で印刷されたということでしょうか。

Former Member
0 Kudos

製品版 Crystal Reports と .NET アプリケーション経由ではエンジンが異なるためにサイズが異なる可能性はございます。

また、2ページ以降が印刷されない事象ですが、給紙方法を自動されるかご確認ください。

(記述例)

crReportDocument.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto  '給紙方法は自動

Yoshi

former_member277269
Participant
0 Kudos

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

Crystal Reports XI R2を使用しています。

ご指摘

頂いた給紙方法ですが

自動(auto)にしましたが2枚目以降が連続して印刷されませんでした。

Former Member
0 Kudos

製品版 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

former_member277269
Participant
0 Kudos

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

既存のrptファイルを最新バージョンに変換保存しましたが

現象に変化がありませんでした。

ちなみにSupport Pack 12 (v.13.0.12.1494)の32bit版を利用しています。

ちょっと気になる点を発見しました。

それは、連続紙をトットプリンタにセットし、用紙の頭出しをし、データ待ちの状態で、

PrinToPrinterでデータを送ると、用紙が一旦退避します。

退避してしまうというのは、正常な印刷データが送られていないのでしょうか?

例えば、給紙方法など・・・

Former Member
0 Kudos

本事象が発生している動作環境ですが、統合開発環境(IDE) ですか、それともランタイム環境ですか。
統合開発環境の場合、Visual Stuido 2013 のプロジェクト内でレポートをプレビュー表示できると思います。そのときにプリンタに印刷した場合、本事象が発生しますか。
また、製品バージョンは、最新版 (13.0.14.1720) を利用してお試しください。

念のために以下の動作環境の情報をご提供ください。

1. Windows OS バージョン
2. プリンタ機種
3. Oracle バージョン

以上。

Yoshi

former_member277269
Participant
0 Kudos

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

本現象が発生している環境はランタイム環境です。

最新バージョンで試してみます。

ちなみに、その他の環境は以下の通りです。

Windows 8.1 pro 64 bit

NEC Multi Impact 700JAN

ORACLE 11g

以上です。

former_member277269
Participant
0 Kudos

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

最新版 (13.0.14.1720)で試しましたが、状況に変化はございませんでした。

(ランタイム環境とIDE環境共に変化なし)

Former Member
0 Kudos


再度、確認させていただきますが、本事象(2ページ目以降が印刷されない)は、開発、ランタイム環境のどちらでも発生すると解釈して間違いございませんか。
その場合、前に提示させていただいた開発環境 (IDE) のプロジェクト内のデザイナからレポートをプレビュー表示後、印刷アイコンのクリックで印刷されたときにも同様な現象が発生いたしますか。
また、PrintToPrinter 関数の第四引数には、「9999」 ではなく、2 または、3 を指定して 2 ページ目以降が印刷されるかご確認ください。

現状のプログラムは、プレビュー表示なしで、直接プリンタへ印刷が行なわれておりますが、プレビュー表示されてから印刷アイコンのクリックで印刷された場合、本事象が発生するかご確認ください。

Yoshi

former_member277269
Participant
0 Kudos

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

2枚目以降のデータは生成されています。

しかし、いったん連続紙が退避するので再度頭だしすると

印刷すると1枚目と印字位置が重なります。

開発環境、ランタイム環境共に現象んは同じです。

デザイナーの付属のプレビューし、印刷ボタンを押した時は

連続して印刷されます。

しかし、印字サイズが豆粒のようになったり、

印字方向が逆になったりします。

PrintToPrinterの引数ですが

第4引数を2や3にしてもは変化はありませんでした。

第3、第4引数を0にしても同様でした。

プリンターの給紙方法の設定がおかしいのでしょうか。

プリンター番号のような取得方法はあるのでしょうか。

Former Member
0 Kudos

今までのご連絡いただいた内容を整理しながら、いくつかのことを確認させていただきます。

①ユーザ定義の用紙サイズの指定方法をご質問いただきました。

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

Former Member
0 Kudos

Visual Studio 内で同一ユーザ定義の用紙サイズでシンプルなレポートを新規作成した場合、2ページ以降が正常に印刷できない事象が発生するかご確認ください。

Yoshi

former_member277269
Participant
0 Kudos

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: 状況に変化はございませんでした。

以上、現在の状況報告をさせていただきました。