您的位置:首页 > 编程语言 > Java开发

PDF在线预览(java实现)

2012-09-13 10:28 561 查看
String fileName = getRequest().getParameter("filename");  							//如路径 C:\\Users\\zj\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\1347500646246.pdf
String location = getRequest().getParameter("location"); 							//如路径 attachments/2012/09/13/FDCD7438-85BB-4008-8F67-9E8C0C82D6FB.pdf
String basePath = SystemParamConfigUtil.getParamValueByParam("filePath");  //读取配置文件附件存储路径			//如路径 d:/data/file/oadoc/
String fileNameWithPath =basePath+location;
try {
// 转码(UTF-8-->GB2312),现在环境下的编码是UTF-8,但服务器操作系统的编码是GB2312
if(fileName!=null&&fileName.trim().length()>0){
fileName = URLEncoder.encode(fileName, "GB2312");
fileName = URLDecoder.decode(fileName, "ISO8859-1");
}else{
fileName = "a."+FileUploadUtils.getExtension(location).toLowerCase();
}
File file = new File(fileNameWithPath);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
int k = 0;
byte abyte0[] = new byte[65000];
getResponse().setContentType("application/pdf");
getResponse().setContentLength((int) l);
getResponse().setHeader("Content-Disposition", "inline; filename="+ fileName);
while ((long) k < l) {
int j;
j = fileinputstream.read(abyte0, 0, 65000);
k += j;
getResponse().getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
} catch (IOException e) {
logger.error("打开失败,文件路径为:"+fileNameWithPath, e);
e.printStackTrace();
}


js:

/**
* 预览PDF
*
*/
function viewPDF(fileLocation){
var filename =httpDownFileLocal(fileLocation);
var strURL = "attachment_viewPdf.do?filename="+filename+"&location="+fileLocation;
var sheight = screen.height-70;
var swidth = screen.width-10;
var winoption="left=0,top=0,height="+sheight+",width="+swidth+",toolbar=yes,menubar=yes,
location=yes,status=yes,scrollbars=yes,resizable=yes";
var tmp=window.open(strURL,'',winoption);
}


/**
* 下载文件到IE本地缓存目录下
*
*/
function httpDownFileLocal(filepathAndName){
var filepath = filepathAndName;
var WshShell = new ActiveXObject("WScript.Shell");
//缓存目录
var keyValue = WshShell.RegRead('HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Cache\\Paths\\Directory');
var PostRecvImpl = new ActiveXObject("ASPCom.PostRecv");
var extName = filepath.substring(filepath.lastIndexOf('.'));
var fileName = new Date().getTime() + extName;
fileName = keyValue+"\\"+fileName;
fileName = fileName.replace(/\\/gm,'\\\\');
PostRecvImpl.HTTPDownloadFile(fileName,filepath);
return fileName;
}


Adobe--设置:“编辑”--“首选项”--“因特网”--把三个复选框打√即可...

详见:附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: