2016-05-11 14 views
0

pdfmakeに問題があります。私はnode.jsサーバー上でPDFを生成したいと思います。私はデータベースからデータをロードして素敵なテーブルを描画し、それを単にフォルダに保存したいと思います。pdfmakeには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); 
    }); 

生成されたPDFは空です。イメージを追加すると、イメージがうまく挿入されます。しかし、フォントは含まれていません。フォントのパス(サンプルで与えられている)は正しいです。

アイデアはありますか?なぜフォントが埋め込まれていないのか、これがnode.jsでどのように行われるのでしょうか? pdfmakeのマニュアルには有効なサンプルはありません。

は、いくつかのデバッグの後、私はこのfunktionでfontWrapper.jsでアプリがクラッシュすること、が分かった:

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]; 
    }; 

誰もがアイデアを持っていますか?

+0

なんてこった...の下に同じ機能のための例を作成しました

フォントパスbefor process.cwd().split('.meteor')[0]を追加します。私は単純なArial.ttfを使用すると動作します。 – IoTMan

+0

あなたの質問に解決済みとマークできますか? – flotto

答えて

2

あなたのケースではTTFは問題ありません。どのフォントでもnode.jsサーバー上でPDFを生成できます。 pdfmake内部

contents = fs.readFileSync(filename);

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

fsが指定したパス上のファイルを読み取ることができません。このライン

ルートフォルダ、 であなたのフォントを配置する必要がありますが、問題がときである This会話あたりとして

私たちはルートパスを与えるフォントオブジェクトを作成し、このパスはfs.readFileSyncこの行では機能しませんので、フォントの正確なパスが必要です

私はしてください。このTTF-ファイルが破損したリンク

https://github.com/daupawar/MeteorAsyncPdfmake

関連する問題