Crystal Report将报告直接打印到打印机,在WPF应用程序中打印垃圾值



我有一个用C#编写的WPF应用程序,当我在打印页面上打印垃圾值时,我直接将报告发送到打印机,而不进行预览。但是,如果我使用ExportToDisk并将报告下载到桌面,则会下载带有正确内容的报告。编写的此代码只是对现有的旧VB.NET Web表单应用程序的转换,我可以在该应用程序中成功打印到打印机。

ReportDocument ObjDoc = new ReportDocument();
cocPrinting.FetchReportDataforUTEnglish(pdtPrintDetails.Rows[lirow]["DOCMFRAN"].ToString().Trim(), pdtPrintDetails.Rows[lirow]["DOCMBRCD"].ToString().Trim(), pdtPrintDetails.Rows[lirow]["DOCMDPCD"].ToString().Trim(), pdtPrintDetails.Rows[lirow]["DOC_NO"].ToString().Trim(), pdtPrintDetails.Rows[lirow]["DOCMBANNER"].ToString().Trim(), pdtPrintDetails.Rows[lirow]["COPY_TYPE"].ToString().Trim(), lsOrgDup, ref cdtUTDocEng, lsErr);
ObjDoc.Load("//Server Name//Crystal_Reports//VHRSSALEFDE002.rpt");
if (cdtUTDocEng.Rows.Count > 0)
ObjDoc.SetDataSource(cdtUTDocEng);
else
{
lsPrintMessage = "Printing Failed -Failed to fetch Undertaking English details";
break;
}

if (cEnvironment.Production == psEnvironment)
{
// ObjDoc.PrintOptions.PaperOrientation = PaperOrientation.Portrait
// ObjDoc.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4
ObjDoc.PrintOptions.PrinterDuplex = PrinterDuplex.Default;
lsPrinterName = cmbPrinter.SelectedValue.ToString().Trim();
if (CheckifPrinterInstalled(cmbPrinter.SelectedValue.ToString().Trim()) == true)
{
// ObjDoc.PrintOptions.PrinterName = cmbPrinter.SelectedValue.ToString().Trim()
ObjDoc.PrintOptions.PrinterName = cmbPrinter.SelectedValue.ToString().Trim();
ObjDoc.PrintToPrinter(1, false, 0, 0);
ObjDoc.Dispose();
lsPrintMessage = lsPrintMessage + "Full documentation English " + pdtPrintDetails.Rows[lirow]["COPY_TYPE"].ToString().Trim() + " has been sent to printer " + cmbPrinter.SelectedValue.ToString().Trim() + @" rn";
}
else
lsPrintMessage = "This printer " + cmbPrinter.SelectedValue.ToString().Trim() + " is not installed on server,cannot print";
}
if (cEnvironment.Development == psEnvironment)
{
ExportFormatType formatType = ExportFormatType.NoFormat;
formatType = ExportFormatType.PortableDocFormat;
ObjDoc.ExportToDisk(formatType, exportPath + "\UndertakingEnglishDoc.pdf");
ObjDoc.Dispose();
lsPrintMessage = lsPrintMessage + "Undertaking English Doc downloaded to desktop";
}

我解决了上述问题,我们需要调用PrintToPrinter的重载方法,并将打印机设置和页面设置传递给它,而不是上面代码中提到的方法。以下是的解决方案

ReportDocument ObjDoc = new ReportDocument();
System.Drawing.Printing.PrintDocument pDoc = new System.Drawing.Printing.PrintDocument();
CrystalDecisions.Shared.PrintLayoutSettings PrintLayout = new CrystalDecisions.Shared.PrintLayoutSettings();
System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pSettings = new System.Drawing.Printing.PageSettings(printerSettings);
System.Drawing.Printing.PageSettings pageSettings = new System.Drawing.Printing.PageSettings(printerSettings);
//get your details in Dataset     
ObjDoc.Load("//ServerName//Crystal_Reports//VHRSSALEPDU001.rpt");   ObjDoc.SetDataSource(YourDataset);
ObjDoc.PrintOptions.PrinterDuplex = PrinterDuplex.Default;
lsPrinterName = cmbPrinter.SelectedValue.ToString().Trim();
ObjDoc.PrintOptions.PrinterName = cmbPrinter.SelectedValue.ToString().Trim();                                     ObjDoc.PrintToPrinter(printerSettings, pSettings, false, PrintLayout);
ObjDoc.Dispose();

此只需要2个dll

  1. CrystalDecisions.CrystalReports.Engine
  2. CrystalDecisions。共享

最新更新