Is there anyway to bypass this error on pdfmake? "Type Error: Cannot read property 'syllable' of null"

Is there anyway to bypass this error on pdfmake? "Type Error: Cannot read property 'syllable' of null"

我正在使用 pdfmake 使用 "Iskoola Pota" 字体生成带有 Sinhala unicode 字符的 PDF。大多数 unicode 字符都能完美运行。但是当文档包含某些字符如 \u0dda\u0ddd 时,它会从 fontkit 模块中抛出此错误。

"Type Error: Cannot read property 'syllable' of null"

(使用其他常用字体时不会报错,但我必须使用"Iskoola Pota"才能正确显示字符。)

问题:https://github.com/bpampuch/pdfmake/issues/1916

我在使用 PDFmake 和 PDFkit 时遇到了同样的问题。我昨天找到了解决方案,这可能会帮助那些遇到同样问题的人。

我正在使用 PDFmake 版本 0.1.65。在您的安装目录中有一个名为 ./node_modules/fontkit 的子目录。转到该目录,您将找到一个名为 index.js 的文件。在文本编辑器中打开 index.js 并搜索单词 'Sinhala',或者您可以转到第 9601 行(如果是 0.1.65 版本,希望您能找到相同的内容)。无论哪种方式,您都应该到达函数 nextSyllable$1() 内的 "sinh: UniversalShaper" 行,如下所示。

function nextSyllable(glyphs, start) {
        :
sinh: UniversalShaper, // Sinhala
        :
}

现在,将 UniversalShaper 更改为 IndicShaper 并保存并退出文件。

我没有对此进行过广泛的测试,但我对它按照我的意愿进行了满意的测试。希望这也会对您有所帮助。我也会将此报告给 Bartek Pampuch(PDFmake 作者)看看。

我遇到了同样的问题,我使用@Harsha Wickramasinghe 所做的类似解决方法解决了这个问题。 这些是步骤:(我使用的是 pdfMake 版本 0.1.65)

  1. 为 PDFMake 库创建了自定义字体(这里我使用了 'iskpota' 字体。为了创建自定义字体,我使用了 )。
  2. 复制'vfs_fonts.js'文件到你的项目(我复制到这个src/assets/pdfMake)。
  3. 复制'node_modules/pdfmake/build/pdfmake.js'文件到你的项目(我复制到这个'src/assets/pdfMake')
  4. 与编辑一起打开'src/assets/pdfMake/pdfmake.js'。

    4.1 并替换

sinh: UniversalShaper, // Sinhala

sinh: IndicShaper, // Sinhala

4.2  And uncommented these lines
//Sinhala: {
//    hasOldSpec: false,
//    virama: 0x0DCA,
//    basePos: 'Last_Sinhala',
//    rephPos: POSITIONS.After_Main,
//    rephMode: 'Explicit',
//    blwfMode: 'Pre_And_Post'
//  },

进行这些更改后,您可以在 pdfMake 库中使用 'iskpota' 字体。

//---------------------------------------- ----------------------//

您可以帮助更改这些代码以添加 'iskpota' 字体。

pdfMake.fonts = {
  Iskpota: {
    normal: 'Iskpota-Regular.ttf',
    bold: 'Iskpota-Bold.ttf',
    italics: 'Iskpota-Regular.ttf',
    bolditalics: 'Iskpota-Regular.ttf'
  }
}

在您的 pdf 中包含您的新字体

defaultStyle: {
  font: 'Iskpota'
},