我正在使用jQuery将我的表单提交给servlet,其中使用iText生成PDF流。
private void service(HttpServletRequest request, HttpServletResponse response)
{
String oid = "something";
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 12, Font.BOLD, BaseColor.BLUE);
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
Paragraph paragraph = new Paragraph(oid, font);
paragraph.setAlignment(Paragraph.ALIGN_CENTER);
document.add(paragraph);
document.close();
pdfWriter.close();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;filename=" + oid + ".pdf");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "No-cache");
response.setContentLength(baos.size());
ServletOutputStream sos = response.getOutputStream();
baos.writeTo(sos);
sos.flush();
}
我的问题是,在我的FORM.submit函数中,如何将“responseData”转换为PDF并在新的选项卡/窗口中打开它而不是当前的JSP页面?
$("#myform").submit(function() {
$.ajax ({
url: "MyServlet",
type: "POST",
data: values
}) .done (function(responseData) {
// alert(responseData); // alert response from servlet, it's raw data of that PDF
// HOW TO 'convert' RESPONSE TO PDF AND OPEN IT IN A NEW TAB/WINDOW ??
});
return false;
});
任何建议将不胜感激。谢谢!
答案 0 :(得分:1)
您无法在ajax函数调用的done
函数中执行您所要求的操作。
浏览器中的Javascript无法提示或强制下载文件。虽然responseData
可能包含PDF的原始字节,但是无法在那里显示它。你应该做的是有一个你可以点击的URL,它将Content-Type
设置为PDF,并将字节直接传输到响应。在javascript中,您可以通过点击上一个URL将其指向打开新标签/窗口。
您可以使用
设置浏览器的位置window.href.location = newLocation;
看看here的技巧。