由于这里的其他答案有点过时,这是我正在使用的解决方案...
首先,正如其他人所提到的 - 您需要这两个库:
- jsPDF:https://github.com/MrRio/jsPDF
- jsPDF-CustomFonts-支持:https://github.com/sphilee/jsPDF-CustomFonts-support
下一步 - 第二个库要求您在名为 default_vfs.js 的文件中为其提供至少一种自定义字体。我正在使用 两个 自定义字体 - Arimo-Regular.ttf 和 Arimo-Bold.ttf - 都来自 Google Fonts。所以,我的default_vfs.js 文件看起来像这样:
(
(function (jsPDFAPI) {
"use strict";
jsPDFAPI.addFileToVFS('Arimo-Regular.ttf','[Base64-encoded string of your font]');
jsPDFAPI.addFileToVFS('Arimo-Bold.ttf','[Base64-encoded string of your font]');
})(jsPDF.API);
显然,您的版本看起来会有所不同,具体取决于您使用的字体。
有很多方法可以为您的字体获取 Base64 编码的字符串,但我使用的是:https://www.giftofspeed.com/base64-encoder/。
它允许您上传字体 .ttf 文件,它会为您提供 Base64 字符串,您可以将其粘贴到 default_vfs.js。
您可以在此处使用我的字体查看实际文件的外观:https://cdn.rawgit.com/stuehler/jsPDF-CustomFonts-support/master/dist/default_vfs.js
因此,一旦您的字体存储在该文件中,您的 HTML 应该如下所示:
<script src="js/jspdf.min.js"></script>
<script src="js/jspdf.customfonts.min.js"></script>
<script src="js/default_vfs.js"></script>
最后,您的 JavaScript 代码如下所示:
const doc = new jsPDF({
unit: 'pt',
orientation: 'p',
lineHeight: 1.2
});
doc.addFont("Arimo-Regular.ttf", "Arimo", "normal");
doc.addFont("Arimo-Bold.ttf", "Arimo", "bold");
doc.setFont("Arimo");
doc.setFontType("normal");
doc.setFontSize(28);
doc.text("Hello, World!", 100, 100);
doc.setFontType("bold");
doc.text("Hello, BOLD World!", 100, 150);
doc.save("customFonts.pdf");
这对大多数人来说可能是显而易见的,但是在那个addFont() 方法中,三个参数是:
- 您在
addFileToVFS() 文件中的addFileToVFS() 函数中使用的字体名称
- 您在 JavaScript 的
setFont() 函数中使用的字体名称
- 您在 JavaScript 的
setFontType() 函数中使用的字体样式
你可以在这里看到这个工作:https://codepen.io/stuehler/pen/pZMdKo
希望这对你和我一样有效。