因为这里其他的答案有点过时,所以这是我正在使用的解决方案...
首先,正如其他人提到的那样,你需要这两个库:
- jsPDF: https://github.com/MrRio/jsPDF
- jsPDF-CustomFonts-support: 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()
方法中,三个参数是:
default_vfs.js
文件中addFileToVFS()
函数中使用的字体名称
- 在JavaScript中
setFont()
函数中使用的字体名称
- 在JavaScript中
setFontType()
函数中使用的字体样式
您可以在这里查看它的工作方式:
https://codepen.io/stuehler/pen/pZMdKo
希望对您有用。