1

我创建了一个 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”类的各种其他方法,但得到了同样的错误。

谁能建议可能是什么原因,以及如何解决这个问题?

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

4

1 回答 1

3

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

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

[...]

从 HTML 生成 PDF

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

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

于 2019-02-13T13:42:55.613 回答