javascript - 如何在JS中保存PDF文件(来自ajax)

标签 javascript php pdf download php-curl

我使用PHP来获取它,因为我需要从另一台服务器下载PDF文件。要下载此文件,我需要登录,而客户端不必登录。

问题是用户得到的PDF文件只是一张白页。 在我的服务器上,当我将其写入文件时,里面仍然有内容 (file_put_contents("test.pdf",$content);)

我在发送之前尝试对其进行 Base64 编码,并发现所发送的数据仍然正确。因此它在解码(atob(data))或下载功能中失败。 (我也尝试过utf8编码)

在下载的pdf文件中,许多字符与这些框或问号(��)交换。

$result = curl_exec($ch);
file_put_contents("test.pdf",$result); //test.pdf contains correct document
echo base64_encode($result);
download(atob(data),"My.pdf") //data is answer of ajax request

function download(data, filename, type) {
    var file = new Blob([data], {
        type: type
    });
    if (window.navigator.msSaveOrOpenBlob) // IE10+
        window.navigator.msSaveOrOpenBlob(file, filename);
    else { // Others
        var a = document.createElement("a"),
            url = URL.createObjectURL(file);
        a.href = url;
        a.download = filename;
        document.body.appendChild(a);
        a.click();
        setTimeout(function () {
            document.body.removeChild(a);
            window.URL.revokeObjectURL(url);
        }, 0);
    }
}

最佳答案

问题是 BLOB 构造函数中隐式的 UTF8 编码。 更多信息here .

关于javascript - 如何在JS中保存PDF文件(来自ajax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737978/

相关文章:

javascript - 只发送一次 Ajax 请求

php - mysql与php的多个查询

php - YouTube API无法在Codeigniter中使用

java - 将页面分为两部分,以便我们可以用不同的源填充每个部分

perl - PDF::Table 中的 Colspan

javascript - 将 Chartist 图表导出为 pdf 文档 (jspdf)

javascript - jQuery .closest 未能找到父级的输入值

php - 使用 strtotime() 推进相对日期

java - 将文件保存为 http 响应错误中收到的 .pdf

javascript - Laravel VueJS 将动态数量绑定(bind)到产品列表组件中的每个输入