使用wkhtmltopdf生成PDF时,字体显示错误。

3
我正在使用wkhtmltopdf将在React HTML页面中生成的报告打印出来。对于所有文本,CSS将字体设置为'Open Sans', sans-serif。在我的HTML头文件中,我有以下内容来加载Open Sans字体:
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">

当我在开发机上运行wkhtmltopdf时,一切似乎都很正常,并且我得到了以下输出:

enter image description here

然而,在我的服务器上(Azure上作为Azure Web应用程序运行),我会得到以下输出:

enter image description here

正如您所看到的,所有文本看起来都非常像素化,除了某些原因加粗的标题。如果你同时看到粗体和普通字体,你还可以看到Open Sans字体没有被使用(最容易看到的是字母“g”)。

所以问题有两个方面:

  1. 为什么Azure上没有使用Open Sans字体?
  2. 为什么文字会出现像素化?如果我将'Open Sans',sans-serif更改为只有sans-serif,那么在浏览器中它看起来仍然不错。

感谢您提供的所有帮助!

编辑

一些额外的信息。 本地PDF文件大小为23Kb,服务器PDF文件大小为207Kb。在服务器PDF上,只有粗体文本是可选的,而其他文本则不是,因此似乎非粗体文本被视为图像而不是实际文本。

此外,对于本地PDF,它在字体下说:OpenSansRegular(嵌入子集),类型:TrueType(CID),编码:Identity-H,这似乎是合理的。然而,在服务器/ Azure PDF下,它在字体下说:ArialBold(嵌入子集),类型:TrueType(CID),编码:Identity-H。

因此,某种原因导致错误的字体被嵌入,非粗体文本被视为图像。


似乎在Azure WebApp中字体未安装或沙盒受限,并将默认值加载到Aria。我还发现了一个类似的问题。我们也可以向Azure团队提供反馈。 - Tom Sun - MSFT
你有这个主题的任何更新吗? - Tom Sun - MSFT
1个回答

0
根据文档,我们可以得知目前Azure WebApp不支持wkhtmltopdf。而Azure团队正在解决此问题。以下是文档中的一部分。

HTML生成PDF

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

有些框架不大量利用 User32/GDI32 (例如wkhtmltopdf),我们正在努力像启用SQL Reporting一样,在Basic+上启用这项功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接