2

我正在使用 IronPDF 作为我们的 PDF 渲染引擎编写的 Azure Web 应用程序中成功生成 PDF 文档。该用例是在 C# 中生成财务报表和发票的 PDF,作为更广泛的封闭业务应用程序的一部分。

在本地开发中一切都运行良好,HTML To PDF 文档生成器功能正是我们所需要的。将 PDF 生成器用于暂存时,我们注意到渲染时间很慢。

 这些有时会级联成请求队列中的 PDF 积压,当等待超过 30 秒时,这可能导致 Web 请求超时。我们的代码并不少见,并仔细遵循 Ironpdf C# PDF 创建教程中的步骤:https ://ironpdf.com/tutorials/html-to-pdf/

PM> Install-Package IronPdf

var Renderer = new IronPdf.HtmlToPdf();
Renderer.RenderHtmlAsPdf(templateHTML);

templateHTML对于每个渲染都是唯一的,并且包含指向 CSS 和图像的链接。

我们的开发人员如何增强 PDF 渲染性能并为 IronPdf.HtmlToPdf PDF 生成器类启用多线程?

在 .NET 的 Azure 上使用 IronPdf 在 C# 中生成 PDF 文件是否存在已知限制?

需要明确的是,我不是在征求有关其他 3rd 方 C# PDF 库的建议,而只是在如何最好地实施和优化我们选择的解决方案。

为了在明确的背景下澄清问题:

  • 哪个 Azure Web 应用程序或功能计划将在 .NET Core 中使用 IronPDF 为 PDF 生成提供最佳 HTML 性能
  • 如何在 Azure 上使用 IronPDF 同时渲染多个 PDF 文档
4

2 回答 2

5

我作为 QA 工程师在 IronSoftware 工作,发现自己能够就这个关于 IronPDF Nuget Packages for .NET 的问题提供建议。

哪个 Azure 计划:在 Azure 上呈现 PDF 文件

对于批量生成 Pdf 文件,我强烈建议在 Azure 上的 .NET 应用程序中使用 IronPdf,我强烈建议使用基本 B1 层或更高层,或者高级计划。Free 和 Shared 层以及 Consumption Plan 不适用于 PDF 渲染。这样做的原因是它使用完整的网络浏览器从 HTML 代码创建 PDF 文件。

我们需要提供足够的资源来处理每个渲染,就像您的浏览器处理任何网页一样——它可能需要一两秒钟。IronPDF 库适用于 Azure WebApps、Functions 和 WebJobs。它适用于 Linux 和 Windows 变体,尽管我会推荐 Windows 变体 Functions 和 WebApps,因为它们经过了更好的测试并且更易于安装。

这仅仅是因为 Linux 对 .NET 的支持较新。Windows 的历史更长,并且更容易为 PDF 生成器用例配置权限!

警告:将 SVG 字体渲染到 PDF 文档中

我们发现,使用 C# 生成 PDF 文件的一个已知限制是 Azure 托管平台不支持服务器在其共享的 Web 应用程序层中加载 SVG 字体,例如 Google 字体。这是因为出于安全原因,这些共享主机平台不允许访问 Windows GDI+ 图形对象。然而,这些限制在 Linux 或 Docker 容器中的 Windows 中不存在。Docker 容器可能是一个很好的方法。

参考:https ://ironpdf.com/docs/questions/azure/

多线程 PDF 生成

在编写 IronPdf 时是线程安全的,但不是真正的多线程。

每个 .NET 进程一次只能呈现一个 PDF 文件。直到 2021 年,它一直是 PDF 文档创建性能的一个主要缺点。例如,即使它被并行调用以同时生成 pdf 文档,它也会一个接一个地运行。

// using System.Linq;
// using System.Threading.Tasks;

var Renderer = new IronPdf.HtmlToPdf();
// Where Htmls is an iEnumerable of HTML strings 

Parallel.ForEach(Htmls, html =>  
  {  
   Renderer.RenderHtmlAsPdf(html); 
   // works but not faster than formal foreach 
  }  

通过更新到 IronPDF 2021.9 及更高版本可以找到解决方案:

// PM> Install-Package IronPdf
// using System.Linq;
// using System.Threading.Tasks;IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;var Renderer = new IronPdf.HtmlToPdf();Parallel.ForEach(Htmls, html =>  
  {  
   Renderer.RenderHtmlAsPdf(html); 
   // works in multiple threads !!
  }  

简而言之:删除旧的 IronPDF Nuget 包并用 IronPDF 2021.9 或更高版本替换它

IronPd 2021.9 是对我们的 .NET PDF 渲染技术的彻底重建:

提供轻松的多线程和异步,使用尽可能多的 CPU 内核。对于 SAAS 和高负载应用,这可能要快一个数量级;优于直接浏览器使用和网络驱动程序。您还可以使用新的 2021 API:

// using IronPdf;
// PM> Install-Package IronPdf
ChromePdfRenderer Renderer = new ChromePdfRenderer();
Renderer.RenderingOptions.FitToPaper = true;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen;
Renderer.RenderingOptions.PrintHtmlBackgrounds = true;
Renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
var doc = await Renderer.RenderHtmlAsPdfAsync ("<h1>Hello world!</h1>");

Azure 是新 IronPDF 渲染器的一等公民,它基于最新的“Blink!” HTML字符串到pdf文件渲染!从 Chrome 相同的 PDF 创建或增强的渲染设置中进行选择 - 我们发现它们比 Chrome 更准确且更易于编码。

我们还推荐这条路线,因为它在 C# PDF 生成器中添加了第 508 节可访问性合规性:使用 PDF(UA) 标记的 PDF 标准生成可访问的 PDF。

IronPDF 团队维护并改进了对以下方面的全面支持:.Net 5、Core 和 Framework 4.0+ 支持。我们还在当前版本 (2021.9) 中使用 1156 个绿色单元和集成测试对其进行了测试

于 2021-07-19T06:08:23.143 回答
0

通常,您希望通过将请求写入存储队列来使其异步,然后立即返回。使用 Azure 函数(高度可扩展)处理来自队列的请求。

根据应用的类型,可以使用 signalR 通道通知 UI pdf 生成完成

于 2021-07-19T03:17:36.870 回答