2017-07-04 9 views
1

次のノードモジュールhtml-pdf を使用して、htmlからpdfに変換しています。私は正常にhtmlをpdfに変換しましたが、作成されたファイルをダウンロードするのに問題があります。私はどちらかが参照するか、自動的に別のステップを経る持つユーザーせずにブラウザ内でPDFをダウンロードしたユーザーのブラウザ内でPDFを開くことができますどのようにPDFを自動生成(ノード、Express)

var fs = require('fs'); 
var pdf = require('html-pdf'); 
var html = fs.readFileSync('./test/businesscard.html', 'utf8'); 
var options = { format: 'Letter' }; 

pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) { 
if (err) return console.log(err); 
console.log(res); // { filename: '/app/businesscard.pdf' } 
}); 

コードは、PDFを生成します。

+1

-whichは、PDFドキュメント自体を含み、MIMEタイプ 'アプリケーション/ pdf'ヘッダでなければならないブラウザ - に戻って送信されます応答: などのブラウザに出力を参照してください。ブラウザーはこのMIMEタイプを検出すると、このデータ型に対して構成されたアクションを開始します。 – reporter

+0

@reporterあなたに例を挙げてもらえますか?ブラウザ側で自動的に処理するのですか、コードクライアント側が必要ですか? – Skywalker

+0

おそらくhttps://stackoverflow.com/questions/11971918/how-do-i-set-a-mime-type-before-sending-a-file-in-node-jsがあなたの質問に答えます。 – reporter

答えて

1

私はあなたのコードにいくつかの変更を加えました。このコードではルートを作成します。このルートでリクエストを行うたびに、HTMLファイルをPDFに変換し、実行中のディレクトリにpdfファイルを作成します。それと同時に、ダウンロードするオプションでブラウザにhtmlファイルを表示します。これがあなたに役立つことを願っています。そしてここに私のコードです。

var express=require('express'); 
var fs = require('fs'); 
var pdf = require('html-pdf'); 
var html = fs.readFileSync('C:/Users/nodejs/tasks/file.html', 'utf8'); 
var options = { format: 'Letter' }; 
var app=express(); 
app.get('/file',function(request,response) 
{ 
    pdf.create(html, options).toFile('./businesscaw.pdf', function(err, res) { 
     if (err) return console.log(err); 
     console.log(res); 
     var file= 'C:/Users/nodejs/tasks/businesscaw.pdf'; 
     fs.readFile(file,function(err,data){ 
      response.contentType("application/pdf"); 
      response.send(data); 
     }); 
    }); 
}); 
app.listen(3000,function(){ 
    console.log("Server listening on port http://loalhost:3000"); 
}); 

出力:localhost:3000/file

+0

より良い理解のための質問:オブジェクト '応答'がどこに宣言されていますか?たぶん間違いがあり、あなたは 'レスポンス'の代わりに 'res'を意味します。 – reporter

関連する問題