use*_*395 8 javascript fonts pdfmake
我有以下代码用于测试驱动器PDFmake。我对字体文件的位置有问题。我看到的文档似乎表明在拉入vfs_fonts文件后我应该能够看到它们。然而,这对我来说并非如此。
function createPdf(assessmentId: string): string {
const pdfMake = require('pdfmake/build/pdfmake.js');
const pdfFonts = require('pdfmake/build/vfs_fonts.js');
pdfMake.vfs = pdfFonts.pdfMake.vfs;
//required font setup, requires that you link to the fonts shipped with npm
const fontDescriptors = {
Roboto: {
normal: 'Roboto-Regular.ttf',
bold: 'Roboto-Medium.ttf',
italics: 'Roboto-Italic.ttf',
bolditalics: 'Roboto-Italic.ttf',
}
};
const termpaper = new PdfLayout();
const docDefinition = termpaper.layout
const printer = new Printer(fontDescriptors);
//get a reference to the PdfKit instance, which is a streaming interface
const pdfDoc = printer.createPdfKitDocument(docDefinition);
return "pdflocation";
}
Run Code Online (Sandbox Code Playgroud)
当此代码执行时,我收到此错误。
错误:
ENOENT:没有这样的文件或目录,请在 Object.fs.openSync (fs.js:642:18) 处的 Error (native) 处打开“Roboto-Medium.ttf”,位于 Object.fs.readFileSync (fs.js:510:33) ) 在 Object.fontkit.openSync (/user_code/node_modules/pdfmake/node_modules/fontkit/index.js:43:19) 在 Function.PDFFont.open (/user_code/node_modules/pdfmake/node_modules/pdfkit/js/font.js :14:24) 在 PDFDocument.font (/user_code/node_modules/pdfmake/node_modules/pdfkit/js/mixins/fonts.js:39:28) 在 FontProvider.provideFont (/user_code/node_modules/pdfmake/src/fontProvider.js) :49:58) at /user_code/node_modules/pdfmake/src/textTools.js:258:27 at Array.forEach (native) at measure (/user_code/node_modules/pdfmake/src/textTools.js:240:13)
我需要做什么才能正确找到这些字体文件?
我也为此苦苦挣扎。我找到的解决方案是在我的项目中实际包含字体文件。列出的文件位于我项目根目录的“fonts”文件夹中,我的代码通过 uri 引用它们:
const fonts = {
Roboto: {
normal: 'fonts/Roboto-Regular.ttf',
bold: 'fonts/Roboto-Medium.ttf',
italics: 'fonts/Roboto-Italic.ttf',
bolditalics: 'fonts/Roboto-MediumItalic.ttf'
}
};
Run Code Online (Sandbox Code Playgroud)
我从这里下载了字体文件。
希望这可以帮助。
您也可以像这样使用,在我的例子中,我的字体、控制器、工作区目录中的帮助程序目录。
const path = require('path'); // path is give you a working directory path.resolve() and you can give your font file path.
const fontDescriptors = {
Roboto: {
normal: path.resolve('./fonts/Roboto-Regular.ttf'),
bold: path.resolve('./fonts/Roboto-Medium.ttf'),
italics: path.resolve('./fonts/Roboto-Italic.ttf'),
bolditalics: path.resolve('./fonts/Roboto-MediumItalic.ttf')
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*395 -1
function createPdf(assessmentId: string): string {
const pdfMake = require("pdfmake/build/pdfmake.js");
const pdfFonts = require("pdfmake/build/vfs_fonts.js");
pdfMake.vfs = pdfFonts.pdfMake.vfs;
const projectId = "crds-wayfinder-int";
const philstorage = new gcs({
projectId: projectId
});
// required font setup, requires that you link to the fonts shipped with npm
const termpaper = new PdfLayout();
const docDefinition = termpaper.layout;
// get a reference to the PdfKit instance, which is a streaming interface
const pdfDoc = pdfMake.createPdf(docDefinition);
pdfDoc.getBuffer((buffer: any) => {
console.log('buffer: ', buffer);
});
console.log('pdfDoc: ', pdfDoc);
return "pdflocation";
}
Run Code Online (Sandbox Code Playgroud)