jsPDF&& jsPDF AutoTable将spcial chars打印为PDF

时间:2016-08-19 15:40:45

标签: javascript html pdf jspdf jspdf-autotable

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

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

下面我举例说明第1行,第2行,第3行和第4行的第一列中缺少带钩的c,然后用空格分隔字符。

<a href="https://s3.postimg.io/cvm679ljn/table.png">table without c with hook</a><br>

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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 应包含带有国家字符集的字体。