2017-07-19 2 views
1

Il ressemble à ceci question a été asked un certain nombre de times avec des versions plus anciennes de pdfMake, mais n'a pas été mis à jour avec ce qui semble être la dernière structure de répertoires. De plus, copier des polices dans un dossier «polices» racine n'est pas génial.Comment créer un pdf sur NodeJs en utilisant pdMake et vfs_fonts?

Comment dans le monde puis-je obtenir une version côté serveur de pdfMake ("pdfmake": "^ 0.1.31") s'exécutant sur NodeJs avec le fichier vfs_fonts.js inclus?

Installation à l'aide NPM sur la ligne de commande

npm install pdfmake fs --save 

le démarrage d'une application NodeJS index.js ce qui suit:

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 Hit et 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) 

Le problème semble résider avec l'emplacement des fichiers de polices/Roboto .... Côté client, ceci est résolu en incluant le fichier vfs_fonts.js. Côté serveur, je ne suis pas sûr. Il n'y a pas de fonts folder or .ttf files inclus. Le cadre météoritique example que j'ai trouvé ne semble pas applicable.

Des idées? Tous les officiels examples référencent un dossier src/fonts. Pas un bon moyen d'aller pour un module de serveur d'installation npm.

+0

Vous n'avez pas besoin d'inclure la police Roboto côté serveur, elle est disponible par défaut. Si vous avez besoin de polices personnalisées, alors vous devez suivre les étapes mentionnées à https://github.com/bpampuch/pdfmake/wiki/Custom-Fonts---client-side –

Répondre

0

Vous devez d'abord télécharger la police Roboto ici https://fonts.google.com/specimen/Roboto et les copier dans votre dossier de polices. Mettez à jour vos polices objet comme ceci:

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

Dans cet exemple, remplacer le « your_public_folder » avec le nom du dossier dans lequel vous avez tout votre code html, css et js fichiers.

+0

Merci pour l'aide, mais je cherchais quelque chose d'autre: "De plus, copier les polices dans un dossier" polices "racine n'est pas génial Comment dans le monde puis-je obtenir une version côté serveur de pdfMake (" pdfmake ":"^0.1.31 ") en cours d'exécution sur NodeJs avec le fichier vfs_fonts.js inclus? " –

+0

Le fichier ** vfs_fonts.js ** n'est requis que si vous voulez utiliser pdfMake du côté client **. Ce fichier est un fichier binaire qui inclut les polices. Vous n'avez pas besoin de créer ce fichier pour l'utiliser avec nodejs. Dans nodejs, vous devez spécifier un chemin avec vos polices comme je l'ai déjà indiqué. – Harry