2016-05-11 7 views
0

Ich habe ein Problem mit pdfmake. Ich möchte eine PDF auf einem node.js-Server erstellen. Ich möchte Daten von einer Datenbank laden und eine nette Tabelle zeichnen und sie einfach in einem Ordner speichern.pdfmake enthält keine Schriften/Texte in node.js

var pdfMakePrinter = require('pdfmake/src/printer'); 
    ... 

     var fonts = { 
     Roboto: { 
      normal: './fonts/Roboto-Regular.ttf', 
      bold: './fonts/Roboto-Medium.ttf', 
      italics: './fonts/Roboto-Italic.ttf', 
      bolditalics: './fonts/Roboto-Italic.ttf' 
     } 
    }; 
    var PdfPrinter = require('pdfmake/src/printer'); 
    var printer = new PdfPrinter(fonts); 

    var docDefinition = { 
     content: [ 
      'First paragraph', 
      'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines' 
     ] 
    }; 

    var pdfDoc = printer.createPdfKitDocument(docDefinition); 
    pdfDoc.pipe(fs.createWriteStream('pdf/basics.pdf')).on('finish', function() { 
     res.send(true); 
    }); 

Das generierte PDF ist leer. Wenn ich ein Bild hinzufüge, wird es gut eingefügt. Aber keine Schriftart ist enthalten. Der Pfad der Schriftarten (die im Beispiel angegeben sind) ist richtig.

Hat jemand eine Idee, warum keine Schriften eingebettet sind und wie das in node.js gemacht werden kann? Es gibt keine gültigen Beispiele in der PDFmake-Dokumentation.

Nach einiger Fehlersuche, fand ich heraus, dass der App stürzt in fontWrapper.js in dieser Funktion:

FontWrapper.prototype.getFont = function(index){ 
    if(!this.pdfFonts[index]){ 

     var pseudoName = this.name + index; 

     if(this.postscriptName){ 
      delete this.pdfkitDoc._fontFamilies[this.postscriptName]; 
     } 

     this.pdfFonts[index] = this.pdfkitDoc.font(this.path, pseudoName)._font; <-- Crash 
     if(!this.postscriptName){ 
      this.postscriptName = this.pdfFonts[index].name; 
     } 

     } 

     return this.pdfFonts[index]; 
    }; 

jemand eine Idee Hat?

+0

Argh ... Die TTF-Dateien beschädigt wurden. Wenn ich eine einfache Arial.ttf verwende, funktioniert es. – IoTMan

+0

Können Sie Ihre Frage als gelöst markieren? – flotto

Antwort

2

TTF ist kein Problem in Ihrem Fall können Sie eine beliebige Schriftart verwenden, um eine PDF auf einem node.js Server zu generieren.

innen pdfmake

TTFFont.open = function(filename, name) { 
     var contents; 
     contents = fs.readFileSync(filename); 
     return new TTFFont(contents, name); 
    }; 

auf contents = fs.readFileSync(filename); diese Linie fs nicht Datei auf bestimmten Pfad lesen

per This Gespräch müssen Sie Ihre Schriften im Stammordner setzen, aber Problem ist, wenn Wir erstellen Font-Objekt Wir geben Root-Pfad und dieser Pfad funktioniert nicht für fs.readFileSync diese Zeile, so müssen Sie den Pfad der Schriftart

hinzufügen process.cwd().split('.meteor')[0] vor dem Fontpath

I Beispiel für gleiche Funktionalität erstellt haben, diese bitte folgenden Link

https://github.com/daupawar/MeteorAsyncPdfmake