我正在尝试使用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();
但这是结果。我希望日本人不要工作,但没有任何东西得到正确显示。这是我得到的输出:
使用特定字体为日语和阿拉伯语工作渲染该语言,但我需要一种支持多种语言的字体,因为我正在打印动态表格,我甚至不知道需要哪种语言。
答案 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这样的库来确定加载前需要哪些字体。