"Ошибка: неизвестная версия 0" при использовании NodeJS PDFKit

Я пытаюсь получить очень хороший NodeJS PDFKit для использования пользовательских шрифтов OpenSans и Roboto от Google Fonts. Мой код выглядит следующим образом:

this.doc = new PDFDocument({bufferPages: true});
this.doc.registerFont("Roboto-Black", path.join(__dirname, "fonts", "Roboto-Black.ttf"));

Я напечатал путь - он находит нужный файл. Я получаю следующую ошибку:

C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:37
        throw new Error("Unknown version " + res.version);
        ^

Error: Unknown version 0
    at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:37:15)
    at C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:69:30
    at Pointer.decode (C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:79:16)
    at ArrayT.decode (C:\projects\qbdvision\node_modules\restructure\src\Array.js:49:30)
    at VersionedStruct.Struct._parseFields (C:\projects\qbdvision\node_modules\restructure\src\Struct.js:53:22)
    at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:42:12)
    at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:40:23)
    at C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:69:30
    at Pointer.decode (C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:79:16)
    at ArrayT.decode (C:\projects\qbdvision\node_modules\restructure\src\Array.js:49:30)
 FAILED

Когда я удалил шрифт Roboto и попробовал один из OpenSans, он работал по крайней мере, но все выглядело ужасно. Письма кровоточили вместе и выглядели почти нечеткими.

Я загрузил шрифты с сайта fonts.google.com, нажав "Выбрать этот шрифт", щелкнув всплывающее всплывающее окно "1 выбранное семейство", а затем щелкнув значок загрузки в верхнем правом углу этого всплывающего окна.

Почему не работают эти шрифты?

1 ответ

Решение

Решение состоит в том, чтобы преобразовать шрифты в кодировку base64 и затем импортировать их. Поэтому в командной строке, используя Linux / Cygwin, введите:

base64 --wrap=0 Roboto-Black.ttf > Roboto-Black-Base64.ttf

Это создаст новый файл TTF, который должен содержать весь текст внутри. Если вы пользуетесь внешним сервисом, убедитесь, что упаковки нет. Это должен быть один непрерывный блок текста.

Затем в своем коде NodeJS выполните:

let fs = require("fs");

let doc = new PDFDocument({bufferPages: true});
let filePath = path.join(__dirname, "fonts", "Roboto-Black-Base64.ttf");
let fileContents = fs.readFileSync(filePath, "utf8");
this.doc.registerFont(fontName, new Buffer(fileContents, "base64"));

Тогда ваши шрифты будут отображаться кристально ясно. Подсказки к этому ответу за то, что дали мне подсказки, которые мне были нужны.

Другие вопросы по тегам