• ベストアンサー

プリンターの用紙サイズを選択

こんばんは。 Windows 8.1 Pro 64bit + Visual Studio (Basic) の環境で印刷するプログラムについて教えてください。 ドットプリンターに出力する連続紙の用紙サイズを追加したのですが crReportDocument.PrintOptions.PaperSize = PaperOrientation.のところで 補完機能のリストに追加した用紙サイズが表示されません。 どうしてなのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

#1です。 不愉快になんかなっていませんよ。気にしないでください。 ただ、私が提示したURLの内容はかなりディープな内容なので、ちょっと無理かなと思っただけです。 クリスタルレポートのメーカーに確認したほうがいいと思います。 ユーザー定義サイズの用紙を使うというのは、そんなに特別なことではないと思いますので、私が提示したようなことをしなくても、何か解決策を提示していただけるのではないでしょうか? お役にたてず申し訳ないですが。

shin-cyan
質問者

お礼

BarcodeMasterさん、おはようございます。 お陰様でようやく解決しました。 ちょっと時間がかかりましたが 良かったです。 ありがとうございました。

その他の回答 (3)

回答No.3

#1です。 そこにこれを書いてねっていうコメントみたいなものなので、ご自分で値をセットするべきなのだと思いますよ。例えば、ReportPathというのは、クリスタルレポートのレポート定義ファイルのようなもののパスを文字列か何かで書くのでは? 私はクリスタルレポートなんか使ったことないですが、ReportDocumentのLoadメソッドのヘルプを見れば、どんな型でどんな値を渡せばいいかわかるはずですよね? 意味もわからずコピペして、例え動いたとしても、あなたの経験値は元のままです。 shin-cyanさんのプログラミング経験と、いま行おうとしていることに、あまりにも差がありすぎるのではないでしょうか。VB.NETの入門書を2冊程度、専門書を2冊程度、まずは読破されることをおすすめします。 そうしたほうが、逆に解決は速いと思います。

shin-cyan
質問者

お礼

BarcodeMasterさん、不愉快な思いをさせて申し訳ありませんでした。 Visual Basicを始めたばかりで何もわからず 藁をもすがる思いでお聞きしてしまいました。 もちろん、参考書は6冊をわきに添えてパソコンと睨めっこしているのですが・・・ 頑張ります。

回答No.2

#1です。ちゃんと「End Class」か「End Module」の上に入れてくださいね。 一応、書式エラーが出ない状態にはしましたが。 -------------------------------------------------------------------------------- Public Function GetPapersizeID(ByVal PrinterName As String, ByVal PaperSizeName As String) As Integer Dim doctoprint As New System.Drawing.Printing.PrintDocument() Dim PaperSizeID As Integer = 0 Dim ppname As String = "" Dim s As String = "" doctoprint.PrinterSettings.PrinterName = PrinterName For i As Integer = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1 Dim rawKind As Integer ppname = PaperSizeName If doctoprint.PrinterSettings.PaperSizes(i).PaperName = ppname Then rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", _ Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i))) PaperSizeID = rawKind Exit For End If Next Return PaperSizeID End Function --------------------------------------------------------------------------------

shin-cyan
質問者

補足

BarcodeMasterさん、早速のご回答ありがとうございます。 ご指示の通り記述しましたところ Public Function ~End Functionの箇所はエラーがなくなりました。 しかし、以下の部分のReportPath、ds、NumberOFCopies、Collated、 StartPage、EndPageの6項目が「宣言されていません。アクセスできない 保護レベルになっています。」というエラーが発生しました。 また、お恥ずかしい単純なことなのでしょうが、教えていただけないでしょうか。 *************************** Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click crReportDocument = New ReportDocument Dim repOptions As CrystalDecisions.CrystalReports.Engine.PrintOptions With crReportDocument repOptions = .PrintOptions With repOptions .PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait .PaperSize = GetPapersizeID("EPSON LX-300+II", "CEPCRP") .PrinterName = "EPSON LX-300+II" End With ' Set the Report Option first before loading the report ' or else settings won't take effect .Load(ReportPath, CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault) .SetDataSource(ds.Tables(0)) .Refresh() .PrintToPrinter(NumberOFCopies, Collated, StartPage, EndPage) End With End Sub '2015/08/20追加(End)

回答No.1

先頭にcrと付いていることから、クリスタルレポートのことでしょうか? メーカーに聞いたほうが早いと思いますけど。 こんなの見つかりました http://www.sourcehints.com/articles/how-to-customize-papersize-in-crystal-report.html http://garfie.weblogs.jp/life_of_dev/2010/12/crystal-reports.html

shin-cyan
質問者

補足

BarcodeMaster さん、ご回答ありがとうございます。 説明不足で申し訳ありませんでした。 ご推察の通り、クリスタルレポートファイルの印刷に苦戦しています。 ご案内頂いた Visual Basicの http://www.sourcehints.com/articles/how-to-customize-papersize-in-crystal-report.html にあるPublic Functionの定義でエラーが発生しました。 なにぶん、50歳を前に始めたVisual Basicで右も左もわかりません。 よろしければご指導お願いできないでしょうか? ********************************* Public Function GetPapersizeID(ByVal PrinterName As String, ByVal PaperSizeName As String) As Integer Dim doctoprint As New System.Drawing.Printing.PrintDocument() Dim PaperSizeID As Integer = 0 ' リターン値 Dim ppname As String = "" Dim s As String = "" doctoprint.PrinterSettings.PrinterName = PrinterName (ex."EpsonSQ-1170ESC/P2") For i As Integer = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1 Dim raw Kind As Integer ppname = PaperSizeName If doctoprint.PrinterSettings.PaperSizes(i).PaperName = ppnameThen Then rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.InstanceOrReflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i))) PaperSizeID = rawKind ExitFor() End If Next Return PaperSizeID End Function ******************************************* 上記のコーディングの Public Function GetPapersizeID(ByVal PrinterName As String, ByVal PaperSizeName As String) As Integer の部分が波線になりエラーとなっています。 よろしくお願いいたします。

関連するQ&A