我正在使用 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);
然而,在这一切结束时,水晶报表仍然显示它自己的打印机选择对话框——但似乎只适用于某些报表。为什么即使我通过 false for 水晶报表也会显示打印对话框promptUser
?那么,如何抑制水晶报表的内部打印机选择对话框并强制它使用我的值?
编辑:哎呀,CR11,不是CR9。
一些进一步的信息:
- 正常工作的报告(即不显示打印对话框)是使用 RDC API 在内部生成的;我们创建一个新的报表对象,将子报表导入其中,然后打印结果。那里没问题。
- 不能正常工作的报告(即强制打开打印对话框)是用以前版本的水晶报告创建的;但是,打开和保存报告似乎没有帮助。
- Crystal Reports 安装目录中的示例报表显示了同样的问题。
我尝试使用 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)