有没有办法绕过pdfmake上的这个错误?"类型错误,无法读取null的'syllable'属性 无法读取null的'syllable'属性"

问题描述 投票:0回答:1

我正在使用pdfmake生成带有僧伽罗语unicode字符的PDF文件,使用的是 "Iskoola Pota "字体。大部分的unicode字符都能完美地工作。但当文档中包含某些字符时,如 \u0dda\u0ddd它从fontkit模块中抛出了这个错误。

"类型错误,无法读取null的'syllable'属性 无法读取null的'syllable'属性"

(当我使用其他常见字体时,它不会出现错误。但我必须使用 "Iskoola Pota",因为我想正确显示这些字符。)

问题。https:/github.compampuchpdfmakeissues1916。

unicode pdfkit pdfmake
1个回答
0
投票

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

我使用的是PDFmake 0.1.65版本。在你的安装目录中,有一个名为.node_modulesfontkit的子目录。进入该目录,你会发现一个名为index.js的文件。在文本编辑器中打开index.js,搜索 "Sinhala "这个词,或者你可以去9601行(希望你能找到同样的,如果它是0.1.65版本)。不管是哪种方式,你都应该找到 "sinh.UniversalShaper "这一行。在函数 nextSyllable$1()里面有一行 "sinh: UniversalShaper",如下图所示。

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

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

我还没有做大量的测试,但满意它做我想做的事情。希望这也能帮助你。我也会把这个问题报告给Bartek Pampuch(PDFmake作者),让他看看。


0
投票

我也有同样的问题,我用@Harsha Wickramasinghe的类似方法解决了这个问题。(我使用的是pdfMake 0.1.65版本)

  1. 为PDFMake库创建了一个自定义字体(这里我使用了'iskpota'字体。为了创建自定义字体,我使用了 这个环节).
  2. 复制'vfs_fonts.js'文件到你的项目中(我复制到这个srcassetspdfMake中)。
  3. 复制'node_modulespdfmakebuildpdfmake.js'文件到你的项目中(我复制到这个'srcassetspdfMake')。
  4. 用编辑器打开'srcassetspdfMakepdfmake.js'。

    4.1 并替换了 "srcassetspdfMakepdfmake.js"。

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 lib中使用'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'
},
© www.soinside.com 2019 - 2024. All rights reserved.