在浏览器中显示pdf以获取ajax响应

时间:2015-10-28 12:09:23

标签: javascript php jquery ajax pdf

我想在浏览器中显示pdf ajax响应。问题是我无法直接打开网址,因为pdf是动态创建的,我该如何显示它。

$.ajax({
                    url: url,
                    type: "POST",
                    data: JSON.stringify(data),
                    processData: false,
                    contentType: "application/json; charset=UTF-8",
                    complete: function (response) {
                        console.log(response);
                        window.open("pdf.php","_blank");

                    }
                });

PDF回复

%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 1265>>

PHP代码

 header('Cache-Control: public');
 header('Content-type: application/pdf');
 header('Content-Disposition: attachment; filename="new.pdf"');  
 header('Content-Length: ' . strlen($data));
 echo $data;

应该感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

将此内容放入pdf.php

header("Content-type: application/pdf");

答案 1 :(得分:0)

我遇到了这个问题,我会给你解决方案......我希望它能解决你的问题。

当您致电您的服务时,您应该要求 dataType: 'binary' 回复。然后,使用 saveAs(FileSaver.js) 触发下载。

但是,$.ajax 不允许您下载开箱即用的二进制内容,它会尝试从 UTF-8 解码您的二进制文件并破坏它。要么使用jQuery插件来解决这个问题jquery.binarytransport.js

示例:

$.ajax({
    type: "POST",
    url: $("form#data").attr("action"),
    data: formData,
    dataType: 'binary',     //--> using jquery.binarytransport.js
    success: function (response) {
        // Default response type is blob
        saveAs(response, "test.pdf"); //--> using FileSaver.js
    }
});

好看! :)