我正在尝试生成一个可以使用jsPDF处理所有语言的PDF。这里的问题是我无法将字体添加到jsPDF中。
这就是我所做的。
-
从Google Noto Fonts获得字体(到目前为止,我尝试了NotoSans regular和NotoSerif regular(
-
使用不同的转换器以多种方式转换.ttf文件,但主要是Github文档中建议的转换器这是他们的字体转换器。
-
修改文件以导出如下字体:
export const Noto = '[Encoded string]';
并将其保存为NotoSerif-Regular-normal.js
-
在我的Vue文件中添加了导入。
import Noto from "@/fonts/Noto/NotoSerif-Regular-normal.js";
-
将字体添加到jsPDF中。
doc.addFileToVFS("Noto.ttf", Noto); doc.addFont("Noto.ttf", "Noto", "normal"); doc.setFont("Noto", "normal"); doc.setFontSize(16);
但是当我尝试创建PDF时,我得到了以下错误:
jsPDF PubSub Error Font does not exist in vFS, import fonts or remove declaration doc.addFont('Noto.ttf').
Error: Font does not exist in vFS, import fonts or remove declaration doc.addFont('Noto.ttf').
知道发生了什么吗?我已经尝试过jsPDF和jsPDF.调试,但它们不适用于这种字体。
最后,我不得不做一些更改来实现这一点。首先,字体转换器对我来说工作不正常。我不得不使用这个Base64转换器这解决了我的第一个问题。
我遇到的第二个问题是导入中缺少花括号,所以我这样编辑它:
import { Noto } from "@/fonts/Noto/NotoSerif-Regular-normal.js";
这完全解决了我的问题。