- PR -

ターミナル環境でCrystal Reportsの専用紙プレビューが崩れる

1
投稿者投稿内容
もっち
会議室デビュー日: 2004/11/08
投稿数: 1
投稿日時: 2004-11-08 10:05
はじめまして。よろしくお願いします。

下記現象で困っております。

[環境]
C#.net、Crystal Reports 9、SQLServer2003、Windows2003ターミナル環境にて開発をしています。
運用環境も同上(運用環境はランタイム配布)

[現象]
Crystal Reportsで専用紙(ユーザー定義サイズ)の帳票プレビューを実行した場合、開発環境では、正しく表示できますが運用環境ではプレビューが崩れてしまいます。(実行の度の用紙のサイズが変わる)
前提として、ユーザー定義用紙はプリンターサーバプロパティで作成しています。

それで下記のように考えました。

プレビュー実行前にデフォルトプリンタとクリスタルレポートのデフォルト用紙の指定をしてやれば回避できないだろうかと考えました。


質問1.用紙サイズを取得(環境によりアドレスが違う)し
rptObject.PrintOptions.PaperSizeにセットしようと思いましたが、そのためには
(CrystalDecisions.Shared.PaperSize)pdlg.PrinterSettings.PaperSizes[i].kind
(小文字のkindです)
もしくは(CrystalDecisions.Shared.PaperSize)pdlg.PrinterSettings.PaperSizes[i].Rawkind
という値を取得しセットするといいのではないかと思っているのですが、この値の取得方法がわかりませんでした。
(大文字のKindでは"Custam"が返りクリスタルレポート定数に存在しないため"DefaultPage"がセットされます)

下記サンプルコード
// ダイアログ設定
ReportClass rptObject = new ReportClass();
PrintDialog pdlg = new PrintDialog();
pdlg.Document = new System.Drawing.Printing.PrintDocument();
string sDRIVER_NAME = "IBM XXXXX" ;

int i =0 ;

// 指定の用紙サイズを検索します。
pdlg.Document.PrinterSettings.PrinterName = sDRIVER_NAME;
for (i = 0; i < pdlg.PrinterSettings.PaperSizes.Count; i++)
{
System.Drawing.Printing.PaperSize pkSize = pdlg.PrinterSettings.PaperSizes[i];
if (sPAPER_NAME == pkSize.PaperName)
{
break;
}
}

rptObject.PrintOptions.PrinterName = sDRIVER_NAME;
rptObject.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)pdlg.PrinterSettings.PaperSizes[i].Kind;

補足:VB.netではiの値=用紙サイズ定数だったのですが…
ただ、CrystalDecisions.Shared.PaperSizeにはSharedの定数しか入らないということはなさそうです。

// 現在のデフォルト用紙のkindを取得しておく(Sharedに存在しない)
CrystalDecisions.Shared.PaperSize test = rptObject.PrintOptions.PaperSize;
// デフォルト用紙のkindをセットする
rptObject.PrintOptions.PaperSize = test ;

上記は正しく設定されますです。

2.デフォルトプリンタを設定する方法
VB.netではAPIを使用し設定するコードを見つけたのですが、C#ではわかりません。

3.その他現象回避の良策があればご示唆ください。

不明瞭な点ございましたら申し訳ございません。
1

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