PDFMake:无法显示中文字体

PDFMake: Can't display chinese fonts

在我的 PDF 下载中,我需要有可能同时使用英语和中文作为插入文本的语言,但是虽然英语可以,但我不能让中文工作。

我遵循了 here 的文档,但无论我尝试使用什么字体,新添加的字体总是显示为空框,更确切地说是这样 [][][][].

我采取的步骤如下:

  1. 从 google 字体下载 SC(和 TC)字体 page

  2. 使用在线转换器将字体系列的常规文件从 .otf 转换为 .ttf(多个站点,因为我认为转换器可能有问题)。这导致了两个大约。 10kb 文件(一个用于 TC,一个用于 SC)。

  3. 使用 pdfmake 文档 page 中的 script.sh,我已将 .ttf 字体转换为 vfs_fonts.js,成功创建了一个对象,其中包含字体名称作为键,base64 字符串作为值

  4. 在我的资产文件夹中移动 vfs_fonts.js 文件后,将必要的代码添加到我的 pdf 导出服务

然而箱子还是空的。这是我的服务代码,其中 pdfFonts.pdfMake.vfs 引用新创建的 vfs 文件并且 docDefinition 的 defaultStyle 设置为 font: "NotoCh".

pdfMake.vfs = pdfFonts.pdfMake.vfs;

pdfMake.fonts = {
  NotoCh: {
    normal: 'NotoSansSC-Regular.ttf',
    bold: 'NotoSansTC-Regular.ttf',
    italics: 'NotoSansSC-Regular.ttf',
    bolditalics: 'NotoSansTC-Regular.ttf',
  },
};

我同时使用了 SC 和 TC 文件,因为最初我以为我使用了错误的汉字,但不管我使用哪个,它仍然不起作用,而且我在控制台中没有收到任何错误或在编译时。我在这里错过了什么?

编辑:这些是我要显示的字符,例如:简体中文体中文

看起来这是与最新 pdfkit 版本 0.11.0 中存在的 Noto 字体相关的错误,似乎已在 pdfkit-next 中修复。 Link 错误

不确定您是否已经解决了问题。我以前遇到过同样的问题,在尝试了网上发布的许多解决方案后,我终于解决了这个问题: 所以你一直在做的是正确的并且会起作用,只要你 将你的自定义字体包含为新的默认字体文档定义中的样式。我在下面包含了我的测试 html 代码供您参考。

注意:自定义字体文件不必为 .ttf 格式。我使用 Google 字体的 Noto Sans SC,.otf 文件工作正常。 (我正在使用 pdfmake v0.1.68)。

<!DOCTYPE html>
<html>
<head>
  <title>PDFMake with Chinese Font</title>
  <meta charset='utf-8'>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/pdfmake.min.js"></script>
  <script src="vfs_fonts.js"></script>
</head>
<body>
  <div id="test">尝试加入简体中文</div>
<script>
  pdfMake.fonts = {
    NotoSansSC: {
      normal: 'NotoSansSC-Regular.otf',
      bold: 'NotoSansSC-Bold.otf',
    }
  };
  var docDefinition = {
    content: document.getElementById('test').innerHTML,
    defaultStyle: {
      font: 'NotoSansSC'
    }
  }
  pdfMake.createPdf(docDefinition).download();
</script>
</body>
</html>