Crystal Reports 11のRDC(COM)APIを使用して印刷しています。私のコードは次のようになります:
HRESULT res = m_Report->SelectPrinter(b_driver, b_device, b_port);
if (FAILED(res)) return res;
// For these calls, the #import wrapper throws on error
m_Report->PutPrinterDuplex(dmDuplex);
m_Report->PutPaperSize(dmPaperSize);
m_Report->PutPaperSource((CRPaperSource)pdlg->GetDevMode()->dmDefaultSource);
if (m_Report->GetPaperOrientation() == crDefaultPaperOrientation)
m_Report->PutPaperOrientation(crPortrait);
VARIANT vfalse;
VariantInit(&vfalse);
vfalse.vt=VT_BOOL;
vfalse.boolVal=0;
res = m_Report->PrintOut(vfalse);
ただし、このすべての最後に、Crystalレポートには独自のプリンタ選択ダイアログが表示されますが、一部のレポートについてのみ表示されます。falseを渡しても、Crystalレポートに印刷ダイアログが表示されるのはなぜpromptUser
ですか?それでは、Crystal Reportsの内部プリンター選択ダイアログを抑制して、自分の値を使用するように強制するにはどうすればよいですか?
編集:おっと、CR9ではなくCR11。
いくつかの詳細情報:
- 正しく機能する(つまり、印刷ダイアログが表示されない)レポートは、RDCAPIを使用して内部的に生成されます。新しいレポートオブジェクトを作成し、それにサブレポートをインポートして、結果を出力します。問題ありません。
- 正しく機能しない(つまり、印刷ダイアログを強制的に開く)レポートは、以前のバージョンのCrystalレポートで作成されています。ただし、レポートを開いて保存しても効果がないようです。
- CrystalReportsインストールディレクトリのサンプルレポートにも同じ問題があります。
VBScriptで再現してみました。ただし、その結果、何も印刷されませんでした(ダイアログも何もありません)。
Set app = CreateObject("CrystalRuntime.Application.11")
Set report = app.OpenReport("C:\Program Files\Business Objects\Crystal Reports 11.5\Samples\en\Reports\General Business\Inventory Crosstab.rpt")
report.PrintOut(True)
rem Testing with a True parameter to force a print dialog - but no printout and nothing appears (no error either though)