2016-06-18 24 views
0

私はpdfmakeを使用してnodejsでpdfを生成し、角度リクエストページにデータを送信します。私はpdfを生成することができます。しかし、私の問題は、私が "16064905-c4aa-4d40-96db-ca7464c38858.pdf"のように見えるpdfをダウンロードするときです。私は自分の.pdfファイルにカスタム名を設定できますか?あなたは、コールバックからの結果を受け取った場合、ここでpdfmakeとnodejsを使用してカスタム名でpdfを生成する

は私のコードは次のコードを追加し、コールバックの結果内法

にあなたの結果を渡すあなたのpdfDoc.on('end', function()

callback(null, result.toString('base64')); 

内部

pdfHandler.createPdfBinary(courseDetail, function(binary) { 
    res.header('content-type', 'application/pdf');         
    res.send(binary); 
}, function(error) { 
    res.send('ERROR:' + error); 
}); 

exports.createPdfBinary = function(courseDetail,callback) { 
    var docDefinition = {...}; 
    var pdfDoc = printer.createPdfKitDocument(docDefinition); 
    var chunks = []; 
    var result; 

    pdfDoc.on('data', function(chunk) { 
     chunks.push(chunk); 
    }); 

    pdfDoc.on('end', function() { 
     result = Buffer.concat(chunks); 
     callback(result); 

    }); 

    pdfDoc.end(); 
} 

答えて

1

ある

b64toBlob(result, 'application/pdf'); 

ファイルのダウンロード方法

function b64toBlob(b64Data, contentType, sliceSize) { 
    contentType = contentType || ''; 
    sliceSize = sliceSize || 512; 

    var byteCharacters = atob(b64Data); 
    var byteArrays = []; 

    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { 
    var slice = byteCharacters.slice(offset, offset + sliceSize); 

    var byteNumbers = new Array(slice.length); 
    for (var i = 0; i < slice.length; i++) { 
     byteNumbers[i] = slice.charCodeAt(i); 
    } 

    var byteArray = new Uint8Array(byteNumbers); 

    byteArrays.push(byteArray); 
    } 

    var blob = new Blob(byteArrays, { 
    type: contentType 
    }); 
    if (blob) { 
    saveAs(blob, 'your_file_name.pdf'); /// TODO change with your filename 
    } else { 
    throw 'Could not generate blob'; 
    } 
} 

あなたが詳細については、コード内で FileSaver

を追加するための1つの以上のパッケージを必要とする私のGitHubの例をチェックアウト https://github.com/daupawar/MeteorAsyncPdfmake

0

私はそれをliteのをやっているだろうもう少し違う。 Btw Content-Dispositionは、ファイルのカスタム名を設定するために使用できるものです。

let fileName = 'sample.pdf' 
let stream = pdfHandler.createPdfBinary(courseDetail) 
res.header('Content-Type', 'application/pdf') 
res.header('Content-Disposition', 'attachment; filename=' + fileName) 
stream.pipe(res) 

// instead of buffering all chunks and concatenating everything 
// we simply just return the stream, so no callback is necessary 
// ...this is also better for memory 
exports.createPdfBinary = courseDetail => { 
    var docDefinition = {...} 
    return printer.createPdfKitDocument(docDefinition) 
} 
関連する問題