后端
要将
Java
后端生成的PDF
流直接打开并下载时,可以使用以下代码:import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.pdf.PdfWriter; public class PdfGenerator { public static void generatePdf(HttpServletResponse response) throws IOException, DocumentException { // 创建一个字节数组输出流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建PDF文档 Document document = new Document(); PdfWriter.getInstance(document, baos); // 打开文档 document.open(); // 添加内容到文档 document.add(/* 添加你的PDF内容 */); // 关闭文档 document.close(); // 设置响应头 response.setHeader("Content-Disposition", "inline; filename=execute.pdf"); response.setContentType("application/pdf"); // 将PDF流写入响应输出流 response.getOutputStream().write(baos.toByteArray()); response.getOutputStream().flush(); } }
在上述代码中,
generatePdf
方法接收一个HttpServletResponse
对象作为参数,用于将生成的PDF
流写入响应输出流中。通过设置响应头的Content-Disposition
为inline; filename=execute.pdf
,可以指定浏览器直接打开PDF
文件,并将文件名设置为execute.pdf
。最后,将PDF
流写入响应输出流并刷新。前端
前端可以使用
iframe
的方式直接展示注意
post
请求通过打开新浏览器页签的方式没有问题post
请求的时候浏览器自带的下载或者保存的时候文件名称无法响应后端的filename
,需要用get
请求
测试代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js">
</script>
<script type="text/javascript">
</script>
</head>
<body>
<div id="form-div1">
<form id="form1" action="http://127.0.0.1:8000/download" method="get" target="iframe1">
连接名:<input value="1" type="text" name="column1" /><br>
连接名:<input value="2" type="text" name="column2" /><br>
连接名:<input value="3" type="text" name="column3" /><br>
<input type="submit" value="提交">
</form>
<iframe style="width: 800px;height: 600px;" id='previewPdf1' name="iframe1"></iframe>
</div>
<div id="form-div2">
<form id="form2" action="http://127.0.0.1:8000/download" method="get" target="_blank">
连接名:<input value="1" type="text" name="column1" /><br>
连接名:<input value="2" type="text" name="column2" /><br>
连接名:<input value="3" type="text" name="column3" /><br>
<input type="submit" value="提交">
</form>
</div>
<div id="form-div3">
<iframe style="width: 800px;height: 600px;" id='previewPdf2' name="iframe2"
src="http://127.0.0.1:8000/download?column1=1&column2=2&column3=3"></iframe>
</div>
</body>
</html>