- PR -

ラベルのカットと、デフォルトのプリンタ設定

1
投稿者投稿内容
ちゃんぽん
会議室デビュー日: 2009/03/21
投稿数: 4
投稿日時: 2009-03-21 18:18
大変お世話になっております。

開発・実行環境--------------------------------------------
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
Crystal Reports for Visual Studio 2005
プリンタ:ISHIDA L-1000-8
----------------------------------------------------------

現在、上記環境にてラベルプリンタ出力用のラベル(帳票)を開発しています。
出力は思い通りにされるのですが、出力後のカットとプリンタのデフォルト設定の兼ね合いがうまくいっておりません。
どうかご教授いただけますでしょうか。

状況@PrintToPrinterメソッド実行時
CrystalReportsのReportDocumentにプリンタ名・プリントサイズ(ユーザー定義)を指定して、PrintToPrinterメソッドを実行すると思い通りに出力されます。
ですが、出力後カットされません。ドライバではカットの設定になっているのですが、ReportDocumentクラスにカットのプロパティがないため、カットされないものと考えています。

状況ACrystalReportViewerでプレビューを出した場合
ReportDocument(プリンタ名・プリントサイズ(ユーザー定義))をCrystalReportViewerに渡してプレビューを表示し印刷した場合、思い通りに印刷され、カットもされます。
ですが、プリンタのデフォルト設定が、「通常使うプリンタ」となってしまいます。
印刷ミスの元となってしまうので、指定したプリンタをデフォルト設定したいのです。

要は、
『印刷する前にプリンタを手動で設定せずにラベル出力後にカットしたい』
という条件を満たしたいのですが、可能でしょうか。

以下の解決案を調べているのですが、どうも難しそうです。

解決案@
 CrystalReportViewerクラスで直接プリンタ設定を行うことで、指定したプリンタをデフォルトの設定とする。
(問題)
 CrystalReportViewerクラスにプリンタ名を指定するプロパティは存在するのでしょうか。

解決案A
 VBのPrintDocumentクラスにReportDocumentを渡し、印刷する。
(問題)
 レポートファイルの情報をPrintDocumentクラスに渡すことは可能でしょうか。


上記の方法が可能か否かご存知の方、または別の方法でも条件クリアの方法をご存知の方がございましたら、ご教授いただきたいと思います。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-03-21 20:32
引用:

ちゃんぽんさんの書き込み (2009-03-21 18:18) より:

解決案(1)
 CrystalReportViewerクラスで直接プリンタ設定を行うことで、指定したプリンタをデフォルトの設定とする。

解決案(2)
 VBのPrintDocumentクラスにReportDocumentを渡し、印刷する。


(前置きですが) CrystalReports の PrinterSetting を設定するということはそこで扱っているものしか制御できないです。 CrystalReportsViewer でなぜカットが出来るかといえば、CrystalReports の PrinterSetting を利用していない (OS の設定を使っている) からです。 そういう意味では、この 2 つの考え方は良い線だと思います。

(1) の方法はプリンタの API を使えば変更可能かもしれませんが OS の設定 (通常使うプリンタ) をその間だけとはいえ変更することになるので、いかがしたものかなーと思います。

(2) の (回避的な) 方法についても考え方としては良い線だと思いますが、対象が PrintDocument なのは非現実的です。 PDF 出力を利用するかにした方が現実的でしょう。 CrystalReports の Export 機能を利用すれば PDF 以外の Format も使えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちゃんぽん
会議室デビュー日: 2009/03/21
投稿数: 4
投稿日時: 2009-03-21 23:23
じゃんぬねっと様
早速の返信ありがとうございます。
いつも掲示板等でお世話になっております。


引用:

(前置きですが) CrystalReports の PrinterSetting を設定するということはそこで扱っているものしか制御できないです。 CrystalReportsViewer でなぜカットが出来るかといえば、CrystalReports の PrinterSetting を利用していない (OS の設定を使っている) からです。



なるほど。
挙動がなかなか理解できなかったのですが、納得しました。
勉強になります。
ありがとうございます。



引用:

(1) の方法はプリンタの API を使えば変更可能かもしれませんが OS の設定 (通常使うプリンタ) をその間だけとはいえ変更することになるので、いかがしたものかなーと思います。

(2) の (回避的な) 方法についても考え方としては良い線だと思いますが、対象が PrintDocument なのは非現実的です。 PDF 出力を利用するかにした方が現実的でしょう。 CrystalReports の Export 機能を利用すれば PDF 以外の Format も使えます。



どうもAの方法がベターなようですね。

@については、他の設定をいじるのは避けたほうが良い、ということでしょうか。
Aの方法ですが、レポートを他の形式にExportし、それをPrintDocumentに渡して印刷する、ということでしょうか。
この方法に関してはまだよく知らないので調べながら試してみます。
ありがとうございました。
上記疑問に対してもお答えいただけたら幸いです。



確認ですが…レポートをPDFファイルとして出力したものを、グラフィックとしてPrintDocumentにわたして印刷する、ということではありませんよね。。
(トンチンカンなことを言ってたらごめんなさい。。)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-03-22 00:41
引用:

ちゃんぽんさんの書き込み (2009-03-21 23:23) より:

(2) の方法ですが、レポートを他の形式にExportし、それをPrintDocumentに渡して印刷する、ということでしょうか。


PDF はあくまで例です。 別の形式にすれば PrintDocument に拘る必要はないと思います。

引用:

確認ですが…レポートをPDFファイルとして出力したものを、グラフィックとしてPrintDocumentにわたして印刷する、ということではありませんよね。。


"PrintDocument なのは非現実的です" と書いたのは別の形式で印刷するという 回避策 の前置きです。 別のアプリケーションから印刷できる形式にすればどうにでもなるでしょうという意味です。 これは (2) の案からプラスアルファで考えたものであり、提案に過ぎませんのでどうするかはお任せします (他にも良い方法はあるかもしれません)。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちゃんぽん
会議室デビュー日: 2009/03/21
投稿数: 4
投稿日時: 2009-03-23 12:35
じゃんぬねっと様
返信ありがとうございます。

引用:

別のアプリケーションから印刷できる形式にすればどうにでもなるでしょうという意味です。




やり方は色々あるということですね。
別の形式にしてそこでプリンタの設定→印刷とすれば、条件クリアできそうです。
この方向で試してみます。

ありがとうございます。
ちゃんぽん
会議室デビュー日: 2009/03/21
投稿数: 4
投稿日時: 2009-04-07 11:43
だいぶ前ですが、解決したので書いておきます。


WMIのWin32_Printerクラスを用いて、OSの「通常使うプリンタ」設定を直接変更することで対応しました。

http://dobon.net/vb/dotnet/graphics/defaultprinter.html

http://hanatyan.sakura.ne.jp/dotnet/Prt12.htm
1

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