如何将字节数组转换为pdf并下载
how to convert byte array to pdf and download
我正在尝试执行一项简单的任务,将 http 响应下载到 pdf。我正在生成一个 pdf 文件,但出现 "Failed to open PDF".
错误
这是响应的样子。
这就是我正在做的事情。
let blob = new Blob([response.data], { type: 'application/pdf' })
FileSaver.saveAs(blob, 'foo.pdf')
响应中的字符串似乎是 Base-64 编码的(参考 fiddle)。您可以使用 fetch()
(或旧浏览器的 XMLHttpRequest()
)对其进行解码:
fetch("data:application/pdf;base64," + response.data)
.then(function(resp) {return resp.blob()})
.then(function(blob) {
FileSaver.saveAs(blob, 'foo.pdf')
});
如果有人正在寻找解决相同问题的方法,here 是一篇支持跨浏览器的好文章。
文章片段:
const binaryString = window.atob(fileResponseData);
const bytes = new Uint8Array(binaryString.length);
const mappedData = bytes.map((byte, i) => binaryString.charCodeAt(i));
const blob = new Blob([mappedData], { type: 'application/pdf' });
FileSaver.saveAs(blob, 'foo.pdf')
我正在尝试执行一项简单的任务,将 http 响应下载到 pdf。我正在生成一个 pdf 文件,但出现 "Failed to open PDF".
错误这是响应的样子。
这就是我正在做的事情。
let blob = new Blob([response.data], { type: 'application/pdf' })
FileSaver.saveAs(blob, 'foo.pdf')
响应中的字符串似乎是 Base-64 编码的(参考 fiddle)。您可以使用 fetch()
(或旧浏览器的 XMLHttpRequest()
)对其进行解码:
fetch("data:application/pdf;base64," + response.data)
.then(function(resp) {return resp.blob()})
.then(function(blob) {
FileSaver.saveAs(blob, 'foo.pdf')
});
如果有人正在寻找解决相同问题的方法,here 是一篇支持跨浏览器的好文章。
文章片段:
const binaryString = window.atob(fileResponseData); const bytes = new Uint8Array(binaryString.length); const mappedData = bytes.map((byte, i) => binaryString.charCodeAt(i)); const blob = new Blob([mappedData], { type: 'application/pdf' }); FileSaver.saveAs(blob, 'foo.pdf')