我正在使用pdfmake生成带有僧伽罗语unicode字符的PDF文件,使用的是 "Iskoola Pota "字体。大部分的unicode字符都能完美地工作。但当文档中包含某些字符时,如 \u0dda
和 \u0ddd
它从fontkit模块中抛出了这个错误。
"类型错误,无法读取null的'syllable'属性 无法读取null的'syllable'属性"
(当我使用其他常见字体时,它不会出现错误。但我必须使用 "Iskoola Pota",因为我想正确显示这些字符。)
我在使用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作者),让他看看。
我也有同样的问题,我用@Harsha Wickramasinghe的类似方法解决了这个问题。(我使用的是pdfMake 0.1.65版本)
用编辑器打开'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'
},