1

ユーザーがフロントエンドのボタンをクリックすると、node.jsプロジェクトでPDFKitとsocket.ioを使用してpdfを生成しています。ここから結果のpdfをエンドユーザーにストリーミングまたは送信するにはどうすればよいですか? ファイルをファイルシステムに保存して、できれば後で削除しなければならないのは避けたいです...何らかの形でストリーミングしたいと思っています。

socket.on('customerRequestPDF', function(){              
    doc = new PDFDocument;        

    doc.text('Some text goes here', 100, 100);

    //I could do this but would rather avoid it
    doc.write('output.pdf');

    doc.output(function(string) {
        //ok I have the string.. now what?

    });

});
4

1 に答える 1

1

Websocket は、実際には PDF を配信するための適切なメカニズムではありません。通常の HTTP リクエストを使用するだけです。

// assuming Express, but works similarly with the vanilla HTTP server
app.get('/pdf/:token/filename.pdf', function(req, res) {
    var doc = new PDFDocument();
    // ...

    doc.output(function(buf) { // as of PDFKit v0.2.1 -- see edit history for older versions
        res.writeHead(200, {
             'Content-Type': 'application/pdf',
             'Cache-Control': 'private',
             'Content-Length': buf.length
        });
        res.end(buf);
    });
});

警告の言葉: この PDF ライブラリは壊れています。バージョン 0.2.1 の時点で、出力は適切なBufferですが、s の代わりに非推奨のbinary文字列エンコーディングを内部的に使用していBufferます。(以前のバージョンでは、バイナリエンコードされた文字列が提供されていました。)ドキュメントから:

'binary'- 各文字の最初の 8 ビットのみを使用して生のバイナリ データを文字列にエンコードする方法。Bufferこのエンコーディング方法は非推奨であり、可能であればオブジェクトを優先して避ける必要があります。このエンコーディングは、Node.js の将来のバージョンでは削除される予定です。

これは、ノードがバイナリ文字列エンコーディングを削除すると、ライブラリが機能しなくなることを意味します。

于 2013-04-23T22:32:30.043 に答える