使用Noto Sans字体时,PDFKit已损坏

时间:2016-05-18 12:48:14

标签: node-pdfkit

我正在尝试使用PDFKit生成带有Node.js的pdf。 pdf包含多种语言的文本,包括阿拉伯语和俄语,所以我尝试使用来自Google的Noto Sans,但是一旦我使用该字体,布局就会完全破坏,甚至不显示拉丁字符:< / p>

var doc = new PDFDocument();
doc.registerFont('NotoSans', 'fonts/NotoSans-Regular.ttf');
doc.font('NotoSans');
doc.pipe(res);
doc.fontSize(15);
doc.text('UTF-8 Test');
doc.text('صباح الخیر');
doc.text('japanese');
doc.text('武大郎');
doc.text('RUSSIAN');
doc.text('Привет / здравствуйте');
doc.end();

但这是结果。我希望日本人不要工作,但没有任何东西得到正确显示。这是我得到的输出:

enter image description here

使用特定字体为日语和阿拉伯语工作渲染该语言,但我需要一种支持多种语言的字体,因为我正在打印动态表格,我甚至不知道需要哪种语言。

1 个答案:

答案 0 :(得分:0)

你的问题是NotoSans-Regular.ttf没有你正在寻找的所有角色。它只有西里尔文,希腊文,拉丁文字符:

  

南非荷兰语,阿格姆,阿寒,阿尔巴尼亚,阿苏,阿塞拜疆,巴菲亚,班巴拉,   Basaa,巴斯克,白俄罗斯语,Bemba,Bena,波斯尼亚语,布列塔尼语,保加利亚语,   加泰罗尼亚,Central Atlas Tamazight,Chiga,Colognian,Cornish,克罗地亚,   捷克语,丹麦语,杜阿拉语,荷兰语,恩布语,英语,世界语,爱沙尼亚语,母羊,   Ewondo,法罗语,菲律宾语,芬兰语,法语,Friulian,Fulah,加利西亚语,   Ganda,德语,希腊语,Gusii,豪萨语,夏威夷语,匈牙利语,冰岛语,   Igbo,印度尼西亚语,爱尔兰语,意大利语,Jola-Fonyi,Kabuverdianu,Kabyle,   Kalaallisut,Kalenjin,Kamba,哈萨克,Kikuyu,Kinyarwanda,Koyra   Chiini,Koyraboro Senni,Kwasio,Kyrgyz,Langi,Latvian,Lingala,   立陶宛语,Luba-Katanga,罗,Luyia,马其顿语,Machame,   Makhuwa-Meetto,Makonde,马达加斯加人,马来人,马耳他人,Manx,Masai,Meru,   蒙古人,Morisyen,Mundang,Nama,North Ndebele,北萨米人,   NorwegianBokmål,Norwegian Nynorsk,Nuer,Nyankole,Oromo,Polish,   葡萄牙语,罗马尼亚语,Rombo,Rundi,俄语,Rwa,Sakha,Samburu,   Sango,Sangu,Sena,Serbian,Shambala,Shona,斯洛伐克,斯洛文尼亚语,Soga,   索马里,西班牙语,斯瓦希里语,瑞典语,瑞士德语,泰塔语,塔吉克语,   Tasawaq,Teso,Tongan,土耳其语,乌克兰语,乌兹别克语,越南语,Vunjo,   Walser,Welsh,Yangben,Yoruba,Zarma,Zulu

您需要使用您正在使用的所有语言加载Noto-San。

将nato克隆到项目目录中:

git clone git@github.com:googlei18n/noto-fonts.git

如果您需要韩语,日语或中文克隆这些字体:

git clone git@github.com:googlei18n/noto-cjk.git

现在你有了想要使用的字体,你需要注册它们

// Default
doc.registerFont('NotoSans', 'noto-ckj/hinted/Noto-Regular.ttf');
// Ariabic
doc.registerFont('NotoSansAR', 'noto-ckj/hinted/NotoKufiArabic-Regular.ttf');
// Chines, Korean, Japanese
doc.registerFont('NotoSansCKJ', 'noto-ckj/NotoSansCJK-Regular.ttc');

一旦你加载了适当的字体,你可以这样使用它们:

doc.font('NotoSans');
doc.text('English');

doc.font('NotoSansAR');
doc.text('العربية'); // Arabic

doc.font('NotoSansCKJ');
doc.text('日本語'); // Japanese
doc.text('武大郎'); // Chinese
doc.text('한국어'); // Korean

doc.font('NotoSans');
doc.text('русский'); // Russian
doc.text('ελληνικά'); // Greek

请注意,您没有在PDF中加载太多字体,因为它们会增加文档的整体大小。您可以考虑使用像Franc这样的库来确定加载前需要哪些字体。