我正在使用Visual Studio 2010中的Crystal Reports 13版。我有一台运行Windows 2012的打印服务器。我在运行时动态设置打印机,因为我有大约30台报告可以去的打印机。所有这些打印机都在打印服务器上配置。
PrintDocument pDoc = new PrintDocument();
PrintLayoutSettings PrintLayout = new PrintLayoutSettings();
PrinterSettings printerSettings = new PrinterSettings();
printerSettings.PrinterName = pq.printerName;
PageSettings pSettings = new PageSettings(printerSettings);
crReportDocument.PrintOptions.DissociatePageSizeAndPrinterPaperSize = true;
crReportDocument.PrintOptions.PrinterDuplex = PrinterDuplex.Simplex;
OnMessageLogged(TraceEventType.Information, "PrePrint " + crReportDocument.PrintOptions.PrinterName);
WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero);
try
{
crReportDocument.PrintToPrinter(printerSettings, pSettings, false, PrintLayout);
OnMessageLogged(TraceEventType.Information, "Printed " + pq.printerName);
}
catch (Exception eprint)
{
OnMessageLogged(TraceEventType.Information, "****Failed to Print** to printer " + pq.printerName + " Exception " + eprint.ToString());
}
finally
{
// Resume impersonation
ctx.Undo();
OnMessageLogged(TraceEventType.Information, "Success Printing to " + pq.printerName);
}
当我调用PrintToPrinter方法时:
crReportDocument.PrintToPrinter(printerSettings,pSettings,false,PrintLayout);
执行需要两到五分钟。无论我是在Visual Studio中运行代码还是在服务器上运行已部署的服务,我都会看到这种行为。
我们最近将服务服务器和打印服务器升级到Windows 2012.之前,我们的服务服务器是Windows 2008,我们的打印服务器是Windows 2003.我们没有遇到这个问题。
是否有人在打印机上花费很长时间或打印到Win2012打印服务器时遇到问题?
感谢?
答案 0 :(得分:2)
使用
_report.ReportClientDocument.PrintOutputController.PrintReport(popt);
代替_report.PrintToPrinter
,速度提高了5-10倍。
我的代码示例:
CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions popt = new CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions();
popt.PrinterName = printerSettings.PrinterName;
_report.ReportClientDocument.PrintOutputController.PrintReport(popt);
在CR 13.06上测试过,PrintToPrinter
花费了大约3800毫秒而PrintReport
只花了大约320个
答案 1 :(得分:0)
此问题是由crystal 13基本运行时中的错误引起的。
如果使用no printer选项保存报告,则忽略设置打印机名称。因此,开发人员必须分配报表文档的整个PrinterSettings属性。这是延迟发生的地方。
// This is the old and reliable way - didn't work for version 13
Settings = new PrinterSettings();
Settings.PrinterName = "HP Printer";
// you don't even need the PrinterSettings object in 10.5, just the printer name
_report.PrintOptions.PrinterName = Settings.PrinterName;
// for version 13 you have to assign the printer settings
if(_report.PrintOptions.PrinterName != Settings.PrinterName)
_report.PrintToPrinter(Settings, new PageSettings(), false);
我已经从10.5(基本的2008)升级,打印速度非常快,但由于这个(未确认的)错误而不得不经历一次难以回滚。
我目前正在研究Crystal的sp 10,看看这个问题是否已经解决。
修改强>
慢速PrintToPrinter的问题现已解决,但SAP建议我们使用:
report.ReportClientDocument.PrintOutputController.PrintReport(options);
而不是PrintToPrinter,它将无法进一步开发。