我正在使用pdfmake库在我的Node Express应用程序中生成PDF文档,并希望将这些文档直接发送回客户端,以触发浏览器自动下载文件。
作为参考,我一直在使用以下示例来编写我的Express中间件:
在我的Angular应用程序中,我正在使用$resource服务,并定义了一个端点,如下所示:
当我尝试这个时,浏览器没有开始下载,查看Chrome时,我收到的响应如下:
作为参考,我一直在使用以下示例来编写我的Express中间件:
https://gist.github.com/w33ble/38c5e0220d491148de1c https://github.com/bpampuch/pdfmake/issues/489
我选择发送一个缓冲响应,因此我的中间件的关键部分如下:
function createPDFDocument(docDefinition, callback) {
var fontDescriptors = {
Roboto: {
normal: './src/server/fonts/Roboto-Regular.ttf',
bold: './src/server/fonts/Roboto-Medium.ttf',
italics: './src/server/fonts/Roboto-Italic.ttf',
bolditalics: './src/server/fonts/Roboto-MediumItalic.ttf'
}
};
var printer = new Printer(fontDescriptors);
var pdfDoc = printer.createPdfKitDocument(docDefinition);
// buffer the output
var chunks = [];
pdfDoc.on('data', function(chunk) {
chunks.push(chunk);
});
pdfDoc.on('end', function() {
var result = Buffer.concat(chunks);
callback(result);
});
pdfDoc.on('error', callback);
// close the stream
pdfDoc.end();
}
在我的Angular应用程序中,我正在使用$resource服务,并定义了一个端点,如下所示:
this.resource = $resource('api/document-requests/',
null,
<any>{
'save': {
method: 'POST',
responseType: 'arraybuffer'
}
});
当我尝试这个时,浏览器没有开始下载,查看Chrome时,我收到的响应如下:
而响应头如下:
看起来我离正确答案并不遥远,我已经搜索到一些解决方案,提到了将其转换为Blob,但我认为只有在返回Base64编码的文档字符串时才相关。
有人能建议我的问题可能是什么吗?
谢谢