2

我正在从我的 HTML 表 usimg jsPDF AutoTable 库创建 PDF 文件,everythink 工作正常,PDF 总是被创建,但我遇到了一些我的国家典型的特殊字符的问题。在我的 PDF 文件中,包含此字符的字符串在没有它们的情况下打印,而且看起来此字符串中的每个字符都用空格分隔。

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

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

<一个href=

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

4

2 回答 2

3

您的问题可能与 jspdf 不支持 utf-8 有关。在本期中关注有关它的更新。那里也提到了间距问题。生成 pdf 文件的另一个不错的选择是pdfmake。它完全支持 utf-8 字符。

于 2016-08-20T22:18:59.440 回答
3

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

  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]);

中的第二个字符串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');

  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 }
});

  1. 运行您的代码 - 生成的 PDF 应该包含带有国家字符集的字体。
于 2021-04-14T09:15:10.960 回答