5

我正在使用 .net 包装器“NReco.PdfGenerator”在 azure Web 应用程序(以标准计划运行)上的 wkhtmltopdf 将 html 文件转换为 pdf,但不能在我的文档中包含自定义字体。PDF 生成器不会加载自定义字体,或者只是忽略它。我尝试了不同的格式来包含字体文件,例如链接到谷歌字体 css、从谷歌字体导入、相对本地路径、绝对本地路径、通过 localhost 加载字体文件和使用 base64 编码字体的字体:

@@font-face {
            font-family: 'testfont';
            src:  url(data:application/x-font-woff;charset=utf-8;base64,...) format('woff');
            font-weight: normal;
            font-style: normal;
        }

与:

font-family: 'testfont';

@@ 因为我使用的是剃刀视图。将生成的 HTML 保存到文件时,它看起来很好并且在浏览器(chrome)中打开时工作正常。

生成 PDF:

var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
return htmlToPdf.GeneratePdf(html);

我还从 font-family 声明中删除了备份字体。我尝试了与 wkhtmltopdf 不同的版本,但没有运气。生成器可以很好地处理来自 localhost 的图像。

在我的 Windows 机器上运行相同的 asp.net 应用程序时,字体工作正常。

NReco 文档说“避免使用自定义字体”(在 azure web 应用程序环境中),这是否意味着没有机会让它运行?为什么不支持自定义字体?有什么解决方法吗?

谢谢你的帮助。

4

3 回答 3

4

这是已知问题:Azure 应用托管环境限制了一些 GDI API,因此 wkhtmltopdf 无法加载(和呈现)自定义字体。只能使用默认情况下存在于 Windows 上的标准字体(如 Arial、Times New Roman 等)。您可以就此主题联系 Azure 支持 - 他们可以提供有关 Azure 应用沙盒限制的更多详细信息。

于 2017-07-16T16:30:10.193 回答
1

为什么不支持自定义字体?有什么解决方法吗?

根据 Azure官方文档,我们可以知道Azure WebApp 目前不支持NReco(使用 wkhtmltopdf) 。以下是文档中的片段。

从 HTML 生成 PDF

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

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

不支持的框架

以下是由于上述一个或多个限制而被发现不可用的框架和场景的列表。可以想象,随着沙盒的发展,将来会支持一些。

由于上述限制,PDF 生成器失败:

  • 同步融合
  • 西伯利亚
  • NReco(使用 wkhtmltopdf)
  • 尖顶.PDF

如果 Nreco 不是唯一的选择。请尝试使用以下方式:

支持以下 PDF 生成器:

  • SQL 报告框架:要求站点在 Basic 或更高版本中运行(并不是说这目前不适用于 Functions 应用程序)

  • EVOPDF:有关供应商解决方案,请参阅http://www.evopdf.com/azure-html-to-pdf-converter.aspx

  • Telerik 报告:要求站点以基本或更高版本运行。

  • Rotativa / wkhtmltopdf:要求站点以基本或更高版本运行。

于 2017-07-17T03:03:36.293 回答
1

要克服 azure Web 应用沙箱限制(自定义字体呈现),您可以使用应用服务中的 Windows 容器来应用自定义字体: https ://docs.microsoft.com/en-us/azure/app-service/app-service-web -tutorial-windows-containers-custom-fonts

于 2019-05-07T08:33:10.243 回答