我正在尝试使用基于客户端的JSON的iText创建PDF文件。 HTML表单数据不适合我,因为它编码JSON,并且在某些浏览器中无法正常工作,因此我尝试改用AJAX。但是毕竟我得到了一个空的PDF文件。
我尝试使用以下内容:
that.parsedEstimator = JSON.stringify(json); //target object
$.ajax({
type: "POST",
url: "<SERVLET_PATH>",
contentType: "application/json",
cache: false,
data: that.parsedEstimator,
success: function (data) {
a = document.createElement('a');
var binaryData = [];
binaryData.push(data);
a.href = window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"}));
a.download = "Estimation.pdf";
a.style.display = 'none';
document.body.appendChild(a);
a.click();
}
});
servlet进行了响应处理
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=Estimation.pdf");
我应该怎么做才能解决此问题?
非常感谢。
答案 0 :(得分:1)
将responseType
设置为blob
可以达到目的,将xhrFields: {responseType: "blob"}
添加到现有代码中,
$.ajax({
type: "POST",
url: "<SERVLET_PATH>",
contentType: "application/json",
cache: false,
data: that.parsedEstimator,
xhrFields: {responseType: "blob"},
success: function (data) {
a = document.createElement('a');
var binaryData = [];
binaryData.push(data);
a.href = window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"}));
a.download = "Estimation.pdf";
a.style.display = 'none';
document.body.appendChild(a);
a.click();
}
});