jsPDF && jsPDF AutoTable 将特殊字符打印到 PDF

Pet*_*čka 3 html javascript pdf jspdf jspdf-autotable

我正在使用img jsPDF AutoTable 库从我的HTML 表创建PDF 文件,Everythink 工作正常,始终创建PDF,但我对我的国家/地区典型的一些特殊字符有疑问。在我的 PDF 文件中,包含这些字符的字符串在打印时没有包含它们,而且,看起来该字符串中的每个字符都用空格分隔。

\n\n

我无法选择没有这个字符的方式,因为它们包含在名称中。我遇到问题的字符是例如带有钩子的 c -> \xc4\x8d。

\n\n

下面我给你举个例子,其中第 1、2、3 和 4 行的第一列缺少带有钩子的 c,然后字符之间用空格分隔。

\n\n

<a href="https://s3.postimg.io/cvm679ljn/table.png">不带 c 带钩子的表格</a><br>

\n\n

你不知道如何解决吗?
\n我来自捷克共和国,如果有帮助的话(因为字符集)..

\n

1_b*_*bug 5

在发布 1.4.0 版本后,jsPDF 终于支持了变音符号字符的编码,但在我看来,以一种非常奇怪的方式。

  1. 找到包含您需要的字符的字体。假设它将是 Calibri。
  2. 转到C:\Windows\Fonts\Calibri并将.ttf字体文件复制到桌面。
  3. 转到jsPDF FontConverter并选择复制的字体文件。单击“创建”按钮。
  4. 您应该获得内容如下的 javascript 文件:

import { jsPDF } from "jspdf"
var font = 'AAEAAAAWAQQAAB...==';
var callAddFont = function () {
  this.addFileToVFS('calibri-normal.ttf', font);
  this.addFont('calibri-normal.ttf', 'calibri', 'normal');
};
jsPDF.API.events.push(['addFonts', callAddFont]);
Run Code Online (Sandbox Code Playgroud)

中的第二个字符串this.addFont('calibri-normal.ttf', 'calibri', 'normal');将是您的字体的名称。记住它。

  1. 将下载的 javascript 文件添加到您的项目中并导入它:import '../utils/calibri-normal';
  2. 转到初始化对象jsPDF并设置字体的位置:

const doc = new jsPDF('p', 'pt', 'a4');
doc.setFont("calibri");    // <-- place here your font name, which you remeber before
//...
doc.save('file001.pdf');
Run Code Online (Sandbox Code Playgroud)

  1. 如果您使用 jsPDF Autotable 也将新字体添加到 autotable 设置中:

doc.autoTable({
    head: [['Column1', 'Column2', 'Column3']],
    body: someDataRows,
    styles: {
      font: 'calibri',    // <-- place name of your font here
      fontStyle: 'normal',
    },
    margin: { bottom: 60 }
});
Run Code Online (Sandbox Code Playgroud)

  1. 运行您的代码 - 生成的 PDF 应包含具有国家字符集的字体。