水晶报表 | 打印 | 默认打印机

4
我正在制作一个应用程序,用户将打印我使用Crystal Report显示的发票。
用户向我展示了他使用ForPro制作的当前应用程序。在该应用程序中,在打印机选项表单下,可以查看所有当前安装的打印机,并且用户可以选择默认打印机。当生成发票时,用户按下打印按钮,然后会出现一个对话框询问副本数量。一旦输入,发票将直接打印,而无需任何打印对话框。如果用户想再次更改打印机,则可以在打印机选项表单中更改。
我想知道是否在Crystal Report中也可以实现类似的功能,并需要指导如何进行操作。
2个回答

11
请看ReportDocument.PrintToPrinter SAP DocsMSDN Docs 以了解如何指定打印机名称并使用 ReportDocument 对象进行打印。
如果可能的话,请避免使用 FoxPro 应用程序 UI 来选择打印机。而是使用标准 print dialog box 选择打印机。
需要注意的是,如果在将报表发送到打印机之前未设置 PrinterName,则它将使用 crystal 文件上的默认打印机,不要与用户 OS 的默认打印机混淆。
以下是显示 PrintDialog 设置一些参数并将报表文档发送到打印机的示例,可以使用 SetParameterValue 方法。
// Note: untested
var dialog = new PrintDialog();

Nullable<bool> print = dialog.ShowDialog();
if (print.HasValue && print.Value)
{
    var rd = new ReportDocument();

    rd.Load("ReportFile.rpt");
    rd.SetParameter("Parameter1", "abc");
    rd.SetParameter("Parameter2", "foo");

    rd.PrintOptions.PrinterName = dialog.PrinterSettings.PrinterName;
    rd.PrintToPrinter(1, false, 0, 0);
}

@Frix,我的报告也使用了一些参数,MSDN上的示例不允许指定参数。请帮忙! - Akshay J

3

以上代码已经无法按照广告所述工作,SAP已承认这一点。 您需要将报表文档设置为ISCDReportClientDocument,然后进行打印。 这是一种更可靠的方法,可以确保打印作业不会发送到默认打印机。 最后两行可以替换为以下代码。

    CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions printReportOptions = new CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions();
    CrystalDecisions.ReportAppServer.Controllers.PrintOutputController printOutputController = new CrystalDecisions.ReportAppServer.Controllers.PrintOutputController();
    CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc;
    rptClientDoc = cryRtp.ReportClientDocument;
    printReportOptions.PrinterName = pDialog.PrinterSettings.PrinterName;
    rptClientDoc.PrintOutputController.PrintReport(printReportOptions);

这是另一个不错的链接
http://mattruma.azurewebsites.net/?p=258

1
虽然答案并不是很清晰,但实际上还是有用的。 - aboy021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接