2017-07-19 76 views
1

看起来像这样question已被asked相当多times与旧版本的pdfMake,但尚未更新似乎是最新的目录结构。另外,将字体复制到根目录“字体”文件夹并不是很好。如何使用pdMake和vfs_fonts在NodeJs上创建pdf?

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

使用NPM上的命令行

npm install pdfmake fs --save 

启动一个应用程序的NodeJS与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文件解决的。服务器端,我不确定。包括NO fonts folder or .ttf files。流星框架example我发现似乎不适用。

任何想法?所有的官方examples引用一个src/fonts文件夹。不是用于npm安装服务器模块的好方法。

+0

您不需要在服务器端包含Roboto字体,它在默认情况下可用。如果您需要自定义字体,则需要按照https://github.com/bpampuch/pdfmake/wiki/Custom-Fonts---client-side –

回答

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') 
    } 
} 

在这个例子中,替换在那里你把所有的HTML,CSS和JS文件的“your_public_folder”与文件夹名称。

+0

中提到的步骤操作。谢​​谢您的帮助,但我一直在寻找其他东西: “另外,将字体复制到根”字体“文件夹并不是很好。 如何在世界中获得pdfMake(”pdfmake“:”^ 0.1.31“)的服务器端版本在包含vfs_fonts.js文件的NodeJ上?“ –

+0

只有在**客户端**上使用pdfMake时,才需要** vfs_fonts.js **文件。该文件是包含字体的二进制文件。你不需要创建这个文件来与nodejs一起使用它。在nodejs中,我需要使用字体指定一个路径,正如我之前回答的那样。 – Harry