如何使用PDFMake和vfs_fonts在Node.js上创建PDF?

Wil*_*ett 6 pdfmake

看起来这个问题已经在旧版本的PDFMake中问了很多了,但是还没有更新为最新的目录结构。另外,将字体复制到根“ fonts”文件夹中也不太好。

在世界上,如何使用随附的vfs_fonts.js文件在Node.js 运行服务器版本的PDFMake(“ pdfmake”:“ ^ 0.1.31”)

在命令行上使用npm进行安装

npm install pdfmake fs --save
Run Code Online (Sandbox Code Playgroud)

使用以下命令启动Node.js应用index.js:

var fonts = {
    Roboto: {
        normal: 'fonts/Roboto-Regular.ttf',
        bold: 'fonts/Roboto-Medium.ttf',
        italics: 'fonts/Roboto-Italic.ttf',
        bolditalics: 'fonts/Roboto-MediumItalic.ttf'
    }
};

var PdfPrinter = require('pdfmake/src/printer');
var printer = new PdfPrinter(fonts);

var dd = {
    content: [
        'First paragraph',
        'Another paragraph'
    ]
}
var pdfDoc = printer.createPdfKitDocument(dd);
pdfDoc.pipe(fs.createWriteStream('basics.pdf')).on('finish',function(){
    //success
});
pdfDoc.end();
Run Code Online (Sandbox Code Playgroud)

击中奔跑:

/usr/local/bin/node index.js
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT: no such file or directory, open 'fonts/Roboto-Regular.ttf'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
Run Code Online (Sandbox Code Playgroud)

问题似乎在于字体/ Roboto ...文件的位置。在客户端,可以通过包含vfs_fonts.js文件来解决。服务器端,我不确定。没有字体文件夹或.ttf文件。我发现的流星框架示例似乎不适用。

有任何想法吗?所有官方示例都引用了src / fonts文件夹。使用npm安装服务器模块不是一个好方法。

Nin*_*nja 7

这就是我为解决这个问题所做的。

下载 "roboto-font": "0.1.0" 模块并在 Roboto 对象中分配该字体的路径,它工作正常。

let fonts = {
    Roboto: {
        normal: 'node_modules/roboto-font/fonts/Roboto/roboto-regular-webfont.ttf',
        bold: 'node_modules/roboto-font/fonts/Roboto/roboto-bold-webfont.ttf',
        italics: 'node_modules/roboto-font/fonts/Roboto/roboto-italic-webfont.ttf',
        bolditalics: 'node_modules/roboto-font/fonts/Roboto/roboto-bolditalic-webfont.ttf'
    }
};
let printer = new pdfMake(fonts);
let pdfDoc = printer.createPdfKitDocument(pdfData);
pdfDoc.pipe(fs.createWriteStream(reportName));
pdfDoc.end();
Run Code Online (Sandbox Code Playgroud)


Har*_*rry 3

您需要首先在此处下载 Roboto 字体https://fonts.google.com/specimen/Roboto 并将它们复制到您的字体文件夹中。像这样更新你的字体对象:

var fonts = {
  Roboto: {
    normal: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Regular.ttf'),
    bold: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Medium.ttf'),
    italics: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Italic.ttf'),
    bolditalics: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-MediumItalic.ttf')
  }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,将“ your_public_folder ”替换为包含所有 html、css 和 js 文件的文件夹名称。

  • 仅当您想在 **客户端** 使用 pdfMake 时才需要 **vfs_fonts.js** 文件。该文件是包含字体的二进制文件。您不需要创建此文件即可将其与 Node.js 一起使用。在 Nodejs 中,您需要指定字体的路径,正如我之前回答的那样。 (4认同)