【问题标题】:Is it possible to print through .NET code from an Azure Worker Role是否可以通过 Azure Worker Role 中的 .NET 代码进行打印
【发布时间】:2023-03-14 20:46:01
【问题描述】:

首先,我知道seems to ask the same thing 的这个问题。不过我会稍微修改一下再问一次。

我正在做一个打印 PDF 的项目。我们有一个用于 PDF 操作的库。我们可以使用它将 PDF 呈现为 System.Drawing.Printing.PrintDocument 对象可以在 c# 中使用和打印的文件。我们将有一个 Azure Worker 角色,它需要许多 1 页的 pdf 并将它们转换成一个大的 pdf,我想要另一个 Azure Worker 角色,然后将大 PDF 假脱机到本地的 Windows 打印服务器。

由于打印部分要慢得多(与 pdf 创建/聚合部分相比),我希望能够在 azure 中托管它以轻松扩展。

我最初的想法是“我认为这根本不可能。Azure 怎么会知道我的本地打印服务器的任何信息。”这是上述类似问题的基本答案。但经过一番搜索,我发现一些结果似乎表明设置 VPN 站点到站点隧道或 ExpressRoute 连接可以让我做我想做的事。但是,我对 Azure 比较陌生,我发现的结果缺少实际、有用和有用的细节。

如果不能完成,那我可以在本地设置一个应用程序服务器来进行打印。但是,如果有人对如何实现这一点有想法或更深入的了解,我很想听听。

【问题讨论】:

  • 你最终使用了什么方法@pfunk?
  • 我们最终编写了一个在本地环境中运行的服务,该服务将 PDF 从 azure 下拉并从本地环境假脱机/打印它们。我们能够从 azure 本地打印文件(使用当时可用的 vpn 类型选项),但是它太慢了,以至于它从来都不是一个真正可行的选项(如每分钟 1 页类型慢)
  • 感谢您的跟进,我将在接下来的几天里关注 Universal Print,它看起来是一个不错的选择。谢谢!

标签: c# azure pdf


【解决方案1】:

基本上,您可以将 PDF 存储到 Azure Blob Storage 中,例如:

http://azureaccount.blob.core.windows.net/PDF/pdf1.pdf

然后定义一个 Azure Queue 实体,如:

MyQueue(Pdf_Id, Pdf_Blob_Url)

MyQueue(1, http://azureaccount.blob.core.windows.net/PDF/pdf1.pdf) 
MyQueue(2, http://azureaccount.blob.core.windows.net/PDF/pdf2.pdf)

并提交至Azure Queue

然后在您的打印服务器上,只需设置一个应用程序来检查 AzureQueue 以处理 PDF。此时,只需直接从 Azure blob 存储 url 获取 PDF 即可执行任何您想做的事情,例如合并、打印......

【讨论】:

    【解决方案2】:

    无需进入 VPN / 站点到站点设置,这里有一个想法:

    您可以在您的网络上托管一个小型应用程序,该应用程序使用服务总线中继来公开 WCF 服务(这将允许从角色传入到服务的连接)

    worker 角色可以使用此 Service,然后将 PDF 发送给它进行打印。

    您的应用会通过您提到的 PrintDocument 对象将 PDF 发送到打印机。

    见:

    https://azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-to-use-relay/

    什么是 Service Bus 中继? Service Bus 中继服务启用 您可以构建在 Azure 数据中心中运行的混合应用程序 以及您自己的本地企业环境。服务总线中继 通过使您能够安全地公开 Windows 来促进这一点 驻留在公司内部的通信基础 (WCF) 服务 企业网络到公有云,无需开通 防火墙连接,或需要对公司进行侵入性更改 网络基础设施。

    【讨论】:

    • 这种方法的问题(我已经考虑过)是 pdf 的渲染/假脱机(“昂贵”部分)仍然发生在无法自动缩放的本地应用服务器上。如果我不能在 Azure 中进行渲染/假脱机,这实际上可能就是我提到的实现方式。
    • 工人角色上还不能渲染吗?您只是将最终确定的 PDF 发送给打印服务机构?或者更好的是,将最终确定的文档放入 blob 存储中,并在工作角色进程中设置一个队列,通过一次响应来自队列的消息来限制发送到打印服务?
    • 渲染并不是指创建 PDF。我的意思是您将 PDF 发送到 PrintDocument 并将 PDF 转换为 PrintDocument 可以实际打印的“东西”的部分。在这种情况下是 EMF。这发生在 PrintDocument.PrintPage 事件中。基本上,我们将文档提供给 PrintDcoument,调用 Print,它遍历页面并将 PDF 的每一页呈现为 PrintPageEventArgs 上的图形对象,这就是实际打印的内容。这就是我希望在工人角色中发生的部分。
    • 啊,我明白了 - 我想 PrintPage 取决于驱动程序。这将您指向虚拟网络。由于可打印文档无论如何都保存在打印机队列中,因此需要自动扩展可打印文档的生产是否有优势?
    • 优点是假脱机部分慢,与其他一切相比。我们有很多高速打印机。创建 PDF 的速度很快。聚合 PDF 的速度很快。我们需要假脱机能够跟上高容量时间的生成并保持打印机队列加载。在打印机假脱机中等待 20 个作业比打印作业、等待、打印作业、等待等效率更高
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2012-08-24
    相关资源
    最近更新 更多