gpt4 book ai didi

javascript - a 元素的 HREF 中的 PDF 下载结果为空 PDF

转载 作者:行者123 更新时间:2023-11-29 23:13:55 24 4
gpt4 key购买 nike

我使用 a-element 作为文件的下载按钮,我之前必须使用 AJAX 进行查询,如所述 here , herehere .我将文件数据作为 Data-URI 放入 a 元素中以创建下载按钮。不幸的是,我不能只指向文件,而是必须那样做。对于大多数下载格式的 HTML、CSV,它的工作原理如下:

var mimeType = "text/html"; // example. works also with others.
var BOM = '\ufeff';
var url = "data:"+ mimeType +";charset=UTF-8," + BOM + encodeURIComponent(response.data);
var linkElem = document.querySelector("#hiddenDownloadLink");
var link = angular.element(linkElem);
link.prop("href", url);
link.prop("download", 'myFile.' + extension);
linkElem.click();

好的。这样可行。但不适用于 PDF。

我在后端创建了一个 PDF(java,使用 openhtmltopdf,但我想这无关紧要,因为 PDF 绝对正确):

httpOutputMessage.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/pdf");
httpOutputMessage.getHeaders().add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"myFile.pdf\"");
makePdf(httpOutputMessage.getBody());

如果我直接查询后端,或者即使我将输出记录到一个文件中,一切都很好。但是,当我如上所述使用我的下载 Controller 时,我得到了一个页数正确但完全为空的 PDF!我认为一定存在编码问题。我尝试使用和不使用 BOM,也尝试使用或不使用 encodeURIComponent。

我还尝试使用 base64 解码作为。因为 window.atob(response.data) 由于换行和其他原因而失败,我尝试了 this转换。结果是损坏的 PDF。导致损坏的 PDF。我不确定这是否有意义。

我的 PDF 数据是这样开始的,所以它没有被压缩或编码:

%PDF-1.4
%����
1 0 obj
<<
/Type /Catalog
/Version /1.7
/Pages 2 0 R
>>
endobj
3 0 obj
<<

我还尝试将字节流转换为 blob 并按照描述生成链接 herehere ,但这会创建损坏的 PDF。

任何想法,为什么我得到空的 PDF 或这里可能出现什么问题以及我如何重新下载下载链接?

--编辑 1

我尝试时也得到有效但空白的 PDF

var blob = new Blob([response.data], {type: 'application/pdf'});
var url = window.URL.createObjectURL(blob);
link.prop("href", url);

当我通过此函数传输 response.data 时,我得到了一个损坏的 PDF。

var utf8_to_b64 = function(str) {
var unescape = window.unescape || window.decodeURI;
str = encodeURIComponent(str);
str = unescape(str);
str = window.btoa(str);

return str;
};

最佳答案

所以我可以完全重现你的情况。我通过后端的 AJAX 请求加载并输出了一个 4 页的 PDF 文件,你的代码示例得到了一个 4 页的空白 PDF。

这是我之后所做的(并下载了正确的 PDF):

我对后端的输出进行了 base64 编码。在我的例子中,我使用的是 PHP,所以它是这样的:

$pdf = file_get_contents('test.pdf');
header('Content-Type: application/pdf');
echo base64_encode($pdf);

然后在前端我只改变了这一行:

var url = "data:"+ mimeType +";charset=UTF-8," + BOM + encodeURIComponent(response.data);

为此:

var url = "data:"+ mimeType +";base64," + encodeURIComponent(response.data);

希望这对您有所帮助。

关于javascript - a 元素的 HREF 中的 PDF 下载结果为空 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53322226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com