【问题标题】:How to create a PDF on Node.js using PDFMake and vfs_fonts?如何使用 PDFMake 和 vfs_fonts 在 Node.js 上创建 PDF?
【发布时间】:2017-12-25 01:51:41
【问题描述】:

在旧版本的 PDFMake 中,question 看起来像 asked 相当多的 times,但尚未使用似乎是最新的目录结构进行更新。另外,将字体复制到根“字体”文件夹也不是很好。

究竟如何获得在 Node.js 上运行的服务器端版本的 PDFMake(“pdfmake”:“^0.1.31”)包含 vfs_fonts.js 文件? p>

在命令行使用 npm 安装

npm install pdfmake fs --save

使用以下命令启动 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();

点击运行和bam:

/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)

问题似乎在于字体/Roboto... 文件的位置。在客户端,这可以通过包含 vfs_fonts.js 文件来解决。服务器端,我不确定。不包括fonts folder or .ttf files。我发现的流星框架example似乎不适用。

有什么想法吗?所有官方examples 都引用了一个 src/fonts 文件夹。对于 npm 安装服务器模块来说,这不是一个好方法。

【问题讨论】:

标签: pdfmake


【解决方案1】:

你需要先在这里下载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')
  }
}

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

【讨论】:

  • 感谢您的帮助,但我正在寻找其他内容:“另外,将字体复制到根“字体”文件夹不是很好。我到底如何获得服务器端版本使用包含的 vfs_fonts.js 文件在 NodeJs 上运行的 pdfMake ("pdfmake": "^0.1.31")?"
  • vfs_fonts.js 文件仅在您想在 客户端 上使用 pdfMake 时才需要。该文件是包含字体的二进制文件。您无需创建此文件即可将其与 nodejs 一起使用。在 nodejs 中,您需要使用我之前回答的字体指定路径。
【解决方案2】:

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

下载“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();

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2014-12-31
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多