我有一个ajax端点,我根据用户的GET
请求生成pdf,然后通过Buffer将其发送回pdf。
当我尝试直接将缓冲区发送给他们时,下载的pdf损坏,但是,当我向他们发送base64版本然后在客户端对其进行解码时,它可以正常工作。
AJAX端点:
module.exports = function(req, res) {
pdf.create('<h1>Title</h1>').toBuffer(function(err, buffer) {
res.setHeader('Content-Type', 'application/pdf');
res.send(buffer.toString('base64'));
});
};
客户:
$.get('/createPDF', (data) => {
var len = binary.length;
var buffer = new ArrayBuffer(len);
var view = new Uint8Array(buffer);
for (var i = 0; i < len; i++) {
view[i] = binary.charCodeAt(i);
}
const blob = new Blob([view], {type: "application/pdf"});
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
});
如果我跳过服务器上的toString('base64')
,而在客户端上跳过Blob
创建上方的部分,则不起作用,但如果包括在内,则可以。有谁知道为什么会这样?请注意,我要的是jquery的ajax的这种特定用例。