我创建了一个打印Crystal Report报表的ASP.NET应用程序。问题在于报告打印在服务器打印机上,因为它是一个Web应用程序,所以我需要它在客户机上打印。在ASP.NET C中打印客户端上的Crystal报表#
我正在使用方法PrintToPrinter(1, false, 0, 0)
以便在没有水晶报表查看器的情况下进行打印。
有谁知道是否有办法让它打印在客户端?如果不;你建议如何在客户端为ASP.Net应用程序生成报告?
我创建了一个打印Crystal Report报表的ASP.NET应用程序。问题在于报告打印在服务器打印机上,因为它是一个Web应用程序,所以我需要它在客户机上打印。在ASP.NET C中打印客户端上的Crystal报表#
我正在使用方法PrintToPrinter(1, false, 0, 0)
以便在没有水晶报表查看器的情况下进行打印。
有谁知道是否有办法让它打印在客户端?如果不;你建议如何在客户端为ASP.Net应用程序生成报告?
最好的办法是设计你的页面的“HTML打印版本”有联系电话:
javascript:window.print();
这里是你需要做/尝试获得报告上打印的客户端计算机是什么
下面一行打开打印对话框不显示打印预览
crystalReportViewer1.PrintReport();
下面一行的打印直接发送到的ReportDocument默认打印机。
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浏览器,它只能在IE中,如果客户端已安装为默认的PDF阅读器Acrobat Reader软件。
自从我对Crystal执行任何操作以来,已经有一段时间了,但是看看它是否有将报表呈现为PDF的选项。然后您可以将其发送给客户端。它不会自动打印,但只要他们有PDF阅读器,他们就可以在没有安装Crystal的情况下进行打印。 – 2012-03-01 19:40:06