在ASP.NET C#中在客户端打印Crystal报表

本文关键字:打印 Crystal 报表 客户端 ASP NET | 更新日期: 2023-09-27 18:26:12

我创建了一个ASP.NET应用程序,用于打印Crystal Report报告。问题是报告是在服务器打印机上打印的,由于它是一个Web应用程序,我需要它在客户端机器上打印。

我使用方法PrintToPrinter(1, false, 0, 0)是为了在没有水晶报表查看器的情况下打印它。

有人知道是否有办法在客户端打印它吗?如果没有;您建议在客户端为ASP.Net应用程序生成什么报告?

在ASP.NET C#中在客户端打印Crystal报表

最好的方法是设计一个"HTML可打印版本"的页面,链接调用:

javascript:window.print(); 

以下是您需要做的操作/尝试在客户端机器上打印报告

下一行打开打印对话框进行打印,而不显示打印预览

crystalReportViewer1.PrintReport();

下面的行直接将报表文档发送到默认打印机。

oReportDocument.PrintToPrinter(1,true,0,0); 

Crystal报表查看器是一个服务器端控件,它并没有真正提供一种简单的打印到客户端的方法。我过去曾通过将报告导出为PDF,然后结合嵌入式PDF查看器和一些JavaScript打印PDF来实现这一点。

// On server side
// Export to PDF
Guid imageGuid = Guid.NewGuid();
string pdfName = String.Format(@"{0}{1}{2}.pdf", pdfPath, reportName, imageGuid);
// expport to unique filename
report.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, pdfName);
// Display the pdf object in a literal control (mine's called pdfLiteral)
sb.AppendFormat("<object ID='"pdfObject'" type='"application/pdf'" data='"{0}'" src='"{0}'" style='"width: 2px; height: 2px; ", pdfName);
sb.AppendLine("z-index:1; display: block; top: 0; left: 0; position: absolute; '">");
sb.Append("</object>");
pdfLiteral.Text = sb.ToString();
pdfLiteral.Visible = true;
// client side
// on document load call the printWithDialog function
 var code = function(){
    var pdf = document.getElementById('pdfObject');
    if (pdf == null)
        return;
    try {
        pdf.printWithDialog();
    }
    catch (err) {
        alert('Please Install Adobe Acrobat reader to use this feature');
    }
  };
// window onload, with delay
window.setTimeout(code, 1000);

请参阅:https://stackoverflow.com/a/25994086/474702

注意:尽管这在Chrome中运行良好,但只有当客户端安装了Acrobat阅读器作为默认PDF查看器时,它才能在IE中运行。