您的位置:首页 > Web前端 > JavaScript

JSP页面展示多个PDF文件

2016-03-16 14:15 369 查看
第一篇博客,记录一下今天遇到的问题。拿到了新的需求,要在一个JSP页面上展示出n个PDF文件,在网上找了找,都是展示一个PDF文件的,自己研究+网上搜索了一下午,终于完成了展示多个的需求。首先思路是:后台传来了PDF文件生成的字符串,在临时文件夹生成一个PDF文件,文件名用当前时间命名避免重复,得到文件所在的路径存入list转到前台,前台用object标签,通过循环拼串的方式展示出来,展现完毕后再通过ajax将临时生成的文件删除。

具体代码为:

//PDF字符串生成PDF文件
public String generatePDF(String imgStr){

BASE64Decoder decoder = new BASE64Decoder();
String imgFilePath = "e:\\test\\"+System.currentTimeMillis()+".pdf";// 新生成的文件

try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
// 生成文件
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
//return imgFilePath;
} catch (Exception e) {
// TODO: handle exception
}
return imgFilePath;
}

前台代码:
<%@page import = "java.io.*" pageEncoding="UTF-8"%>
<%@ page import="java.util.List"%>
<meta http-equiv=“X-UA-Compatible” content=“IE=EmulateIE7″>
<%
String webpath = request.getContextPath();
List<String> strPdfPathList = (List)request.getAttribute("filePathList");
String maindiv = "";
for(int i=0;i<strPdfPathList.size();i++){
String address = strPdfPathList.get(i).replace("\\","\\\\");
String divtemp = "<div><object classid='clsid:CA8A9780-280D-11CF-A24D-444553540000' width='990' height='700' border='0' top='-10' name='pdf'><param name='toolbar' value='false'> <param name='_Version' value='65539'><param name='_ExtentX' value='20108'><param name='_ExtentY' value='10866'><param name='_StockProps' value='0'><param name='SRC' value='"+address+"'></object></div>";
maindiv +=divtemp;
}

%>
<html>
<head>
<contextPath value="<%=webpath%>"/>
<script language="javascript">
function init(){
var pdfmaindiv = document.getElementById("pdfmaindiv");
pdfmaindiv.innerHTML = "<%=maindiv%>";
var webpath = document.getElementsByTagName("contextPath")[0].value;

var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

var addressArray = new Array();
<%for(int i=0;i<strPdfPathList.size();i++){%>
addressArray[<%=i%>] = '<%=strPdfPathList.get(i).replace("\\","\\\\")%>';
var fileAddress = addressArray[<%=i%>]
alert(fileAddress);
var url = webpath+"/custcontact/acceptHisQueryAction.do?method=delFile&fileAddress="+fileAddress;

xmlhttp.open("POST",url,true);
xmlhttp.send();
<%}%>

}

</script>
</head>

<body onload="init()">

<div id="pdfmaindiv">

</div>
</body>
</html>

删除生成的临时文件后台代码:

//删除生成的临时文件
public void delFile(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws ActionException{
request = setDict(request,actionMapping);
RequestUtil requestUtil = new RequestUtil(request);
String fileAddress = NullProcessUtil.nvlToString(requestUtil.getParameter("fileAddress"), "");
File file = new File(fileAddress);
if(file.exists()){
file.delete();
}
}


第一次写的博客被误删了,不知道怎么恢复,重新发布一次吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: