.net - 当应用程序部署在 Azure Web App 中时,无法使用 HiqPDF 生成 PDF

标签 .net asp.net-mvc azure azure-web-app-service hiqpdf

我创建了一个 ASP.NET MVC 应用程序 (.NET Framework 4.6.2),并使用 HiqPDF(版本 - 10.17.0)从 HTML 生成 PDF。

代码如下:

public static string ConvertHtmlToPdf(string pdfContentFilePath, string pdfOutputPath)
{            
    try
    {
        string fileName = pdfOutputPath + DateTime.Now.ToString("ddMMyyyyHHmmssf") + ".pdf";
        string pdfContents = System.IO.File.ReadAllText(pdfContentFilePath);

        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        htmlToPdfConverter.TrimToBrowserWidth = true;

        PdfDocument pdfDocumentObject = htmlToPdfConverter.ConvertHtmlToPdfDocument(pdfContents, null);
        pdfDocumentObject.WriteToFile(fileName);

        return fileName;
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

我正在尝试使用非常基本的 HTML(只有一个粗体文本,没有图像,没有其他格式)。

该代码在本地环境下运行良好,并成功生成PDF。但是,当我在 Azure 上部署此项目时,出现以下错误:

“导航超时”

我尝试了“HtmlToPdf”类的各种其他方法,但得到了相同的错误。

任何人都可以建议可能的原因是什么以及如何解决此问题吗?

对此的任何帮助将不胜感激。

最佳答案

大多数 HTML 到 PDF 库都在 Azure Web App Sandbox 中被阻止。 .

所有 Azure Web 应用程序(以及移动应用程序/服务、Web 作业和功能)都在称为沙箱的安全环境中运行。每个应用程序都在自己的沙箱内运行,将其执行与同一台计算机上的其他实例隔离,并提供额外的安全性和隐私性,否则这些应用程序将无法获得。沙箱机制旨在确保机器上运行的每个应用程序都会有最低保证的服务水平;此外,沙箱强制执行的运行时限制可以保护应用程序免受可能在同一台计算机上运行的其他资源密集型应用程序的不利影响

[...]

PDF Generation from HTML

有多个库可用于将 HTML 转换为 PDF。许多 Windows/.NET 特定版本利用 IE API,因此广泛利用 User32/GDI32。这些 API 很大程度上被屏蔽在沙箱中(无论计划如何),因此这些框架无法在沙箱中运行。

有些框架没有广泛利用 User32/GDI32(例如 wkhtmltopdf),我们正在努力在 Basic+ 中启用这些框架,就像启用 SQL 报告一样。

关于.net - 当应用程序部署在 Azure Web App 中时,无法使用 HiqPDF 生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54671478/

相关文章:

c# - 如何启用退格键,删除到 maskededitextender 日期字段

asp.net-mvc - Asp.net mvc 3.0 树形结构页面自定义路由

azure - 超时超过 3 小时 Automation Runbook Azure

c# - 如何检查 DateTime 是否发生在今天?

.net - 如何启用多个上下文的 EF 迁移到单独的数据库?

asp.net-mvc - 处理 "object reference not set to an instance of an object"错误

azure - sqlpackage.exe 用于忽略 DevOps 发布管道中的特定架构

c# - 仅当从网络驱动器进行编译时,编译问题[“Root activity type is invalid”]

c# - 防止将特定的类型层次结构用于泛型参数

azure - 在 Azure 中,大多数情况下通过 SSL 的 HTTPWebRequest 失败 - 底层连接已关闭