使用pdfMake通过Node Express将PDF内容返回给浏览器

我正在使用pdfmake库在我的节点快递应用程序中生成PDF文档,并希望将这些文件直接发送回客户端,以触发浏览器自动下载文件。

作为一个参考点,我一直在使用下面的例子来表示我的中间件:

https://gist.github.com/w33/38c5e0220d491148de1c https://github.com/bpampuch/pdfmake/issues/489

我select了发送缓冲的响应,所以我的中间件的关键部分如下所示:

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度的应用程序中,我正在使用$资源服务,并有一个像这样定义的端点:

 this.resource = $resource('api/document-requests/', null, <any>{ 'save': { method: 'POST', responseType: 'arraybuffer' } }); 

当我尝试这个,我没有得到任何浏览器下载踢,在Chrome浏览器收到的响应如下:

在这里输入图像描述

响应标题如下所示:

在这里输入图像描述

所以看起来我并不是一百万英里,我已经四处搜寻,发现有关转换为Blob的解决scheme,但是我认为这只有在服务于Base64编码的文档string时才有意义。

任何人都可以提出什么可能是我的问题吗?

谢谢

一切似乎都很好,唯一缺less的是触发下载的逻辑。

看看这个CodePen作为一个例子。

在这里,我使用的是base64编码的数据,但是你也可以使用二进制数据,只是不要忘了改变href ,我提到scope.dataURL = base64....

我也有问题从Node.js提供PDF文件,所以我使用phantomjs。 您可以检出这个存储库完整的代码库和实现。

 console.log('Loading web page') const page = require('webpage').create() const args = require('system').args const url = 'www.google.com' page.viewportSize = { width: 1024, height: 768 } page.clipRect = { top: 0, left: 0 } page.open(url, function(status) { console.log('Page loaded') setTimeout(function() { page.render('docs/' + args[1] + '.pdf') console.log('Page rendered') phantom.exit() }, 10000) })