2017-11-15 9 views
2

私は、ユーザが何らかのデータを入力するnode.js + expressアプリケーションを構築しています。pdfkitでPDFを生成し、そのファイルがユーザに送信されます。私はファイルを正常に生成することができます。問題は、生成されたファイルをダウンロードすると空になってしまうことです。私もPDFを開くことができない、読者(プレビュー、macOSのネイティブリーダー)は、ファイルが空であると言います。私は次のコードを使用しています:空のファイルを返すダウンロード

var express = require('express'); 
var router = express.Router(); 
var guid = require('guid'); 
var PDFDocument = require('pdfkit'); 
var fs = require('fs'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/criar', function(req, res, next) { 
    var filename = guid.raw()+'.pdf'; 
    var doc = new PDFDocument(); 
    doc.pipe(fs.createWriteStream(filename)); 

    doc.font('fonts/UbuntuMono-R.ttf') 
     .fontSize(25) 
     .text('Some text with an embedded font!', 100, 100); 

    doc.end(); 

    res.download(filename, 'rifas.pdf', function(err){ 
     if(!err){ 
      fs.unlink(filename); 
     } 
    }) 
}); 

module.exports = router; 

正しく生成されているサーバーで、私のダウンロードファイルが空である理由を知っていますか?

ありがとうございます!

答えて

3

本当に物理ファイルが必要ですか?そうでない場合は、クライアントに直接ストリームできます。

var express = require('express'); 
var router = express.Router(); 
var PDFDocument = require('pdfkit'); 
var fs = require('fs'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/criar', function(req, res, next) { 
    var doc = new PDFDocument(); 
    doc.pipe(res); 

    doc.font('fonts/UbuntuMono-R.ttf') 
     .fontSize(25) 
     .text('Some text with an embedded font!', 100, 100); 

    doc.end(); 

}); 

module.exports = router; 
+0

パーフェクト!確かに物理ファイルは必要ありませんでしたので、ファイルを応答に配管するだけで十分です。 ありがとう! –

関連する問題