【发布时间】:2020-06-26 21:57:36
【问题描述】:
我正在使用 jsPDF(https://parall.ax/products/jspdf、https://github.com/MrRio/jsPDF)在 Web 应用程序中生成动态 PDF。
效果很好,但我想知道是否可以在生成的 PDF 中使用 Google 网络字体。
我找到了与这个问题相关的各种链接(包括关于 SO 的其他问题),但大多数都已过时,而且没有任何东西看起来是确定的,所以我希望有人澄清这是否/如何工作.
这是我迄今为止尝试过的,但没有成功:
首先,加载字体,并将其缓存为 base64 编码的字符串:
var arimoBase64;
var request = new XMLHttpRequest()
request.open('GET', './fonts/Arimo-Regular.ttf');
request.responseType = 'blob';
request.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
arimoBase64 = this.result.split(',')[1];
}
reader.readAsDataURL(this.response);
};
request.send()
接下来,创建 pdf doc:
doc = new jsPDF({
orientation: "landscape",
unit: "pt",
format: "letter"
});
doc.addFileToVFS("Arimo-Regular.ttf", arimoBase64);
doc.addFont("Arimo-Regular.ttf", "Arimo Regular", "normal");
doc.setFont("Arimo Regular", "normal");
doc.text("Hello, World!", 100, 100);
doc.save("customFontTest");
保存 PDF 时 - 如果我在浏览器中查看它 - 我可以看到自定义字体。但是 - 如果我使用 Adobe Reader 或 Mac Preview 应用程序查看它 - 字体是不可见的。
我认为这是因为字体是使用浏览器的字体缓存在浏览器中呈现的,但该字体实际上并未嵌入到 PDF 中,这就是使用 Adobe Reader 看不到它的原因。
那么 - 有没有办法完成我想要做的事情?
【问题讨论】:
-
你试过this解决方案吗?
-
@Luca - 我试过了。看起来它可能是一个选项,但看起来它适用于 jsPDF 的 1.4.0 版,但不适用于 1.4.1 版(截至此日期的最新版本)。我有点不愿意依赖一个不适用于最新版本 jsPDF 的库。
-
@Luca - 再次感谢您的评论。最终,确实对我有用。只是花了我一点时间来弄清楚。非常感谢!
标签: javascript jspdf