微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以从.net core 3.1 Windows Service打印文档?

如何解决是否可以从.net core 3.1 Windows Service打印文档?

tl; dr如何从.net Core 3.1 Windows服务打印pdf?

我创建了一个简单的打印后台处理程序BackgroundService类,该类以Windows Service的身份运行,并且非常高兴地通过网络api监视打印队列。

我发现开始编写实际的打印代码时遇到的一个小问题是,.net核心似乎不希望人们从BackgroundService类中打印文档。

System.Printing的文档似乎仍建议这样做。

不支持使用System.Printing命名空间中的类 Windows服务或ASP.NET应用程序或服务中。尝试中 从这些应用程序类型之一中使用这些类可能 产生意外问题,例如服务性能下降 和运行时异常。

System.Drawing.Printing在其文档中也有类似的注释,指出它也不能可靠地用于Windows服务。

BackgroundService Windows服务打印是否是件坏事(tm)?除了System.Printing / System.Drawing.Printing以外,我的(简短)谷歌搜索没有找到明显的替代方法吗?打印要求应该非常简单,我有pdf字节数组数据,只需要以某种方式到达打印机即可。

我意识到我可以做一些事情,例如将后台处理程序转换为Console应用程序,然后从“计划任务”运行它,但是Windows Service模型似乎只需安装并忘记就更简单了(下一个运用于PC)到仓库中的打印机)

任何有用的建议将不胜感激

解决方法

令人难以置信的是,我们确实实现了不可能的目标-从.net Core 3.1 Windows服务打印PDF。

我们使用 FreeSpire.PDF v5.4.0 nuget软件包 和以下代码将预先生成的pdf数据打印到Zebra标签打印机。

bool printedOK = true;
string printErrorMessage = "";
try
{
    PdfDocument pdf = new PdfDocument(printJobResult.printJob.PrintData);
    pdf.PrintSettings.PrinterName = jobInfo.PrinterAddress;
    pdf.PrintSettings.DocumentName = jobInfo.Type == PrintJobType.Label ? $"Label {jobInfo.OrderNumber}" : $"DeliveryNote {jobInfo.OrderNumber}";                                    
    if(jobInfo.Type == PrintJobType.Label)
    {
        pdf.PrintSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom",_labelWidth,_labelHeight);
        pdf.PrintSettings.SetPaperMargins(2,2,2);
    }
    pdf.PrintSettings.SelectSinglePageLayout(Spire.Pdf.Print.PdfSinglePageScalingMode.FitSize,true);
    _logger.LogDebug($"Paper Size - Width:{pdf.PrintSettings.PaperSize.Width} Height:{pdf.PrintSettings.PaperSize.Height} Name:{pdf.PrintSettings.PaperSize.PaperName} Kind:{pdf.PrintSettings.PaperSize.Kind} RawKind:{pdf.PrintSettings.PaperSize.RawKind}");

    pdf.Print();
}
catch (Exception ex)
{
    printErrorMessage = "Printing Error: " + ex.ToString();
    printedOK = false;
}

自我注意事项-请仔细检查以下几点...

FreeSpire.PDF插件的较新版本不允许打印,我相信即使使用5.4.0版本(我认为可以打印10页)也有限制,但是出于我们的目的,请使用5.4.0版本的该插件使我们能够创建一个整齐的小标签标签打印假脱机程序,在仓库PC上作为Windows服务运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。