jsPDF PubSub 错误——“没有用于字体的 unicode cmap”

use*_*996 5 html javascript jspdf

我正在尝试向 jsPDF 添加自定义字体。我将文件转换为 base64 并执行以下操作:

doc.addFileToVFS("font/rajdhani-regular-webfont.woff", base64enc);
Run Code Online (Sandbox Code Playgroud)

其中 base64enc 是 base64 编码的字符串

然后我添加字体如下:

doc.addFont('font/rajdhani-regular-webfont.woff', 'rajdhani', 'normal');

doc.setFont('rajdhani');
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到以下错误

[Error] jsPDF PubSub Error – "No unicode cmap for font" – Error: No unicode cmap for font — jspdf.min.js:9068
Error: No unicode cmap for font — jspdf.min.js:9068registerTTF — jspdf.min.js:9068i — jspdf.min.js:9027:86open — jspdf.min.js:9032(anonymous function) — jspdf.min.js:6031publish — jspdf.min.js:308yt — jspdf.min.js:729:166addFont — jspdf.min.js:1286callme — freport.php:500onclick — freport.php:100
    publish (jspdf.min.js:29:5989)
    yt (jspdf.min.js:29:18435)
    addFont (jspdf.min.js:29:33701)
    callme (freport.php:500)
    onclick (freport.php:100)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样。

Tun*_*dan 5

我也一直在挣扎,但我终于找到了方法!

正如这里提到的,有一个由 jsPDF Contributers 制作的字体转换器,您可以在这里找到它。

首先在此处上传您的字体,然后输入您的字体名称。它将生成 JS 文件,然后您需要将其包含在您的项目中。如果您愿意,这可以是您的 js 文件夹。

一旦它进入您的文件夹,请将此脚本标记添加到您的index.html(或您需要jsPDF的任何html文件)。

<script src="./fontName.js"></script>
Run Code Online (Sandbox Code Playgroud)

现在,您已使用该文件将字体自动添加到 jsPDF Api,您可以继续从代码中删除以下两行

doc.addFileToVFS("font/rajdhani-regular-webfont.woff", base64enc);
doc.addFont('font/rajdhani-regular-webfont.woff', 'rajdhani', 'normal');
Run Code Online (Sandbox Code Playgroud)

完成此操作后,只需检查从转换器下载的文件,您应该在最底部看到下面代码的第二个参数上的字体名称。

this.addFont('fontFile.woff', 'THIS IS FONT NAME' , '.......');
Run Code Online (Sandbox Code Playgroud)

复制那个名字。在这个例子中我们可以说它是“rajdhani”。因此,您只需将其放在在 jsPDF (doc) 实例上创建的任何文本之前即可。

doc.setFont('rajdhani');
Run Code Online (Sandbox Code Playgroud)

您可以简单地用下面的方法进行测试

/* 
"p" for portrait page orientation
"pt" for points. default is mm
"a4" is page size 
*/
var doc = new jsPDF("p","pt","a4"); 
doc.setFont('rajdhani');
doc.text('This is a test', 20,20);
doc.save('filename.pdf');
Run Code Online (Sandbox Code Playgroud)

现在,您应该会看到一个 pdf,其上边距为 20 像素,左 20 像素,并用您的字体样式写着“这是一个测试”。

希望这可以帮助 :)