2016-05-18 9 views
1

Я пытаюсь создать pdf-файл с помощью Node.js, используя PDFKit. PDF содержит текст на нескольких языках, включая арабский и русский, так что я пытаюсь использовать Noto Sans от Google, но как только я использую этот шрифт, расположение полностью неисправна, не показывая даже латинские символы:PDFKit сломан, когда используется шрифт Noto Sans

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

Используя специальные шрифты для японских и арабских работ делают этот язык, но мне нужен шрифт, который поддерживает несколько языков, потому что я печатаю динамическую таблицу, и я не даже знать, какие языки необходимы.

ответ

0

Вы ошибаетесь, так как NotoSans-Regular.ttf не имеет всех символов, которые вы ищете. Он имеет только кириллицу, греческие, латинские символы:

африкаанс, Aghem, Акан, албанский, Асу, Азербайджан, Bafia, Bambara, Basaa, баскский, белорусский, Bemba, Бэо, боснийская, бретонский, болгарская, Голландский, Эмбу, Английский, Эсперанто, Эстонский, Эве, Эвондо, Фарерский, Филиппинский, Финский, Французский, Фриулианский, Фулахский, Галисийский, Ganda, Немецкий, Греческий, Gusii, Hausa, Гавайский, Венгерский, Исландский, Igbo, индонезийский, ирландский, итальянский, Jola-Fonyi, Kabuverdianu, Kabyle, Kalaallisut, Kalenjin, Kamba, Kazakh, Kikuyu, Kinyarwanda, Koyra Chiini, Koyraboro Senni, Kwasio, Kyrgyzstan, Langi, Latvian, Lingala, Литовский, Люба-Катанга, Ло, Луйя, Македонский, Махаме, Махува-Метта, Маконде, Малагасийский, Малайский, Мальтийский, Манкс, Масаи, монгольские, Morisyen, Mundang, Нам, Северная ндебеле, Северная Sami, Норвежских, Норвежский нюнорск, нуэры, Nyankole, ор, польский, португальские, румынская, Ромба, Рундите, русские, RWA, саха, Самбер, Санго, Сангу, Сена, Сербский, Шамбала, Шона, Словацкий, Словенский, Сога, Сомали, испанский, суахили, шведский, швейцарский немецкий, Таита, таджикский, Tasawaq, Teso, Tongan, Turkish, Ukrainian, Uzbek, Vietnamese, Vunjo, Валш, Уэльс, Янбен, Йоруба, Зарма, Зулу

Вам необходимо загрузить Noto-San на всех языках, которые вы используете.

Клонирование нато в каталоге проекта:

git clone [email protected]:googlei18n/noto-fonts.git 

Если вам нужен корейский, японский или китайский клон эти шрифты, а также:

git clone [email protected]: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, чтобы выяснить, какие шрифты вам нужны, прежде чем загружать их.

+0

P.S. Я заметил, что при использовании непечатаемого (вместо намека) я видел некоторые из тех же результатов, что и вы. Это руководство по стилю Googles (https://material.google.com/style/typography.html#typography-typeface): «Подсказки - это инструкции, встроенные в шрифт о том, как изменять (искажать) глиф чтобы выглядеть лучше на дисплеях с низким разрешением. В качестве компромисса намеченный шрифт потребляет больше места, чем неизведанная версия ». – jwerre

+0

Это имеет смысл, но я все еще запутался, потому что, если я удалю все другие языки, даже текст на английском не работает. Спасибо за ссылку Franc, я проверю ее и посмотрю, могу ли я использовать динамический язык (я не знаю, на каком языке я буду печатать) – jasalguero

+0

Если вы клонируете git repo, упомянутое выше, вы заметите, что в подкаталоги: «намекнул» и «не заметил», убедитесь, что вы используете «намек» версию шрифта. У меня была такая же проблема с «без признаков». – jwerre