如何使用pdMake和vfs_fonts在NodeJ上创建pdf?

时间:2017-07-19 16:49:34

标签: pdfmake

对于旧版本的pdfMake,question看起来asked已经times了很多fonts folder or .ttf files,但是还没有使用看似最新的目录结构进行更新。另外,将字体复制到根"字体"文件夹不是很好。

我在世界上如何获得在NodeJs 上运行的pdfMake(" pdfmake":" ^ 0.1.31")的服务器端版本以及包含的vfs_fonts.js文件吗

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

npm install pdfmake fs --save

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

问题似乎在于fonts / Roboto ...文件的位置。客户端,这可以通过包含vfs_fonts.js文件来解决。服务器端,我不确定。没有example。我发现的流星框架examples似乎并不合适。

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

2 个答案:

答案 0 :(得分:1)

这就是我要解决的问题。

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

答案 1 :(得分:0)

您需要先在此处下载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文件。