Crystal reports 11 RDC (COM API) displays printer dialog even when I tell it not to prompt

Posted by bdonlan on Stack Overflow See other posts from Stack Overflow or by bdonlan
Published on 2011-02-07T14:17:21Z Indexed on 2011/02/16 15:25 UTC
Read the original article Hit count: 464

I'm using Crystal Reports 11's RDC (COM) API to print. My code looks like this:

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);

However, at the end of all this, crystal reports still shows its own printer selection dialog - but only for some reports, it seems. Why does crystal reports show a print dialog even when I pass false for promptUser? And how, then, can I suppress crystal reports' internal printer selection dialog and force it to use my values?

Edit: Whoops, CR11, not CR9.

Some further information:

  • The reports that work properly (ie, do not show the print dialog) are generated internally using the RDC API; we create a new report object, import subreports into it, then print the result. No problem there.
  • The reports that do not work properly (ie, force the print dialog to open) have been created with a previous version of crystal reports; however, opening and saving the report does not seem to help.
  • Sample reports in the Crystal Reports installation directory show the same problem.

I tried reproducing with VBScript; however, the result was that nothing was printed at all (no dialog, no nothing):

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)

© Stack Overflow or respective owner

Related posts about com

Related posts about printing