我在C#.NET 4.6.1中有一个Windows服务,它正在构建SSRS报告并将报告发送到各种网络打印机。所有打印机都安装在安装服务的服务器上。所有这些都在Windows Server 2008R2服务器上运行,最近客户端升级到Windows Server 2012R2,现在没有打印输出。我没有收到错误,当检查打印机上的作业状态时,我可以看到打印机上的作业数增加1,PrintJobStatus.Spooling为真,但打印机上没有任何错误。
private bool PrintSheet(AppPrintRequest model, PackagingEntities db)
{
try
{
var oPrinter = db.AppPrinters.Where(x => x.AppPrinterID == model.AppPrinterID).FirstOrDefault();
var lpsPrintServer = new LocalPrintServer();
var psPrintServer = new PrintServer();
var sbLog = new StringBuilder();
byte[] reportBytes = BuildSSRSReport(model);
PrintQueueCollection pqcAvailablePrinters;
if (!string.IsNullOrEmpty(oPrinter.AppPrinterServer))
{
pqcAvailablePrinters = lpsPrintServer.GetPrintQueues();
}
else
{
pqcAvailablePrinters = psPrintServer.GetPrintQueues();
}
sbLog.AppendFormat("System: {0} ", model.AppPrintRequestSystem);
sbLog.AppendFormat("Printer: {0} ", oPrinter.AppPrinterAddress);
foreach(var oAvailablePrinter in pqcAvailablePrinters)
{
sbLog.AppendFormat("Printer FullName: {0} ", oAvailablePrinter.FullName);
sbLog.AppendFormat("Printer Name: {0} ", oAvailablePrinter.Name);
sbLog.AppendFormat("Printer Description: {0} ", oAvailablePrinter.Description);
}
var oLaserPrinter = pqcAvailablePrinters.FirstOrDefault(pqCurrent => pqCurrent.Name.ToUpper() == oPrinter.AppPrinterAddress.ToUpper());
sbLog.AppendFormat("Report Bytes is null = {0} ", reportBytes == null);
sbLog.AppendFormat("Laser Print is null = {0} ", oLaserPrinter == null);
if (reportBytes != null && oLaserPrinter != null)
{
sbLog.AppendFormat("Report Bytes Length: {0} ", reportBytes.Length);
sbLog.AppendFormat("Laser Printer: {0} ", oLaserPrinter.Name);
sbLog.AppendFormat("Laser Printer Busy: {0} ", oLaserPrinter.IsBusy);
PrintSystemJobInfo oPrintJob = oLaserPrinter.AddJob();
sbLog.AppendFormat("Laser Printer Job Count: {0} ", oLaserPrinter.NumberOfJobs);
GetPrintJobStatus(oPrintJob, sbLog);
oPrintJob.JobStream.Write(reportBytes, 0, reportBytes.Length);
oPrintJob.JobStream.Close();
oPrintJob.Refresh();
sbLog.AppendFormat("Job Completed: {0} ", oPrintJob.IsCompleted);
NLogger.Debug(string.Format("Print Sheet: {0}", sbLog.ToString()));
return true;
}
NLogger.Debug(string.Format("Print Sheet: {0}", sbLog.ToString()));
return false;
}
catch (Exception ex)
{
NLogger.Fatal("PrintEngine_PrintSheet", ex);
return false;
}
}