【问题标题】:How to convert base64 byte data into downloadable pdf file?如何将base64字节数据转换为可下载的pdf文件?
【发布时间】:2020-06-02 03:00:31
【问题描述】:

我有一个来自 API 响应的编码 base64 数据并存储在一个变量 encodedBase64 中。

let encodedBase64 = '一些base64编码的长数据';

function base64ToArrayBuffer(base64) {
    var binaryString = window.atob(base64);
    console.log('binaryString ', binaryString);
    var binaryLen = binaryString.length;
    var bytes = new Uint8Array(binaryLen);
    for (var i = 0; i < binaryLen; i++) {
       var ascii = binaryString.charCodeAt(i);
       bytes[i] = ascii;
    }
    return bytes;
 }

 function saveByteArray(reportName, byte) {
    var blob = new Blob([byte], {type: "application/pdf"});
    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    var fileName = reportName;
    link.download = fileName;
    link.click();
};

var sampleArr = base64ToArrayBuffer(encodedBase64);
saveByteArray("Sample Report", sampleArr); 

执行此代码后,我可以下载 pdf 文件名 SampleReport.pdf,但是当我打开它时,它显示 Failed to load PDF document. 错误 我的代码有什么问题?

【问题讨论】:

  • 在代码中看不到任何错误。* 您确定encodedBase64 中的数据有效吗?您可以通过在其前面添加 "data:application/pdf;base64," 并将结果字符串设置为浏览器的 URL 来打开 pdf 吗? (* 在 Firefox 中,您需要在文档中附加该 以便其 click 有效,但这显然与您描述的问题无关)。
  • data:application/pdf;base64 -- 是的,将其设置到浏览器 URL 后也显示相同的错误,无法加载 PDF 文档
  • 那么你的base64数据损坏了。
  • 但我尝试在线解码并下载 pdf 文件,但下载的 pdf 文件没有损坏。
  • 您是否尝试过使用 saveByteArray("Sample Report", encodedBase64 );

标签: javascript base64 blob


【解决方案1】:

使用前端很难完成

但可以使用 Nodejs 使用以下代码轻松完成。

fs.writeFile('pdfFileName.pdf', base64DataString, {encoding: 'base64'}, error => {
    if (error) {
        throw error;
    } else {
        console.log('buffer saved!');
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2021-04-19
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多