Java实现在线预览功能
java实现在线预览功能,需要用到 jacob.dll jacob.jar 预览pdf所需js pdfobject.min.js
将上传文件转为pdf保存。
<div class="control-group"> <label class="control-label">文件:</label> <div class="controls"> <input type="file" name="file" id="ck_attach_path" style="width:98%;"/> </div> </div>
后台保存文件并将文件转换为pdf
@RequiresPermissions("ha01:haHyjhb:edit") @RequestMapping(value = "save") public String save(HaHyjhb haHyjhb, @RequestParam MultipartFile file,Model model, RedirectAttributes redirectAttributes,HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException { haHyjhb.setBh(hybh); String xdlj = request.getSession().getServletContext().getRealPath("userfiles")+"\\hy"+haHyjhb.getLx()+"\\"+dateStr+"\\"+hybh+"\\"; String path = ""; if(!file.isEmpty()){ HaHyzlb haHyzlb = new HaHyzlb(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 String filename= df.format(new Date()); // 保存在服务器的随机文件名 //材料编号 haHyzlb.setClhb(filename); haHyzlb.setHybh(hybh); xdlj=xdlj.replaceAll("\\\\", "/"); haHyzlb.setLj(xdlj); haHyzlb.setCllx("0"); String aa[]=file.getOriginalFilename().split("[.]"); String fileName =filename+"."+aa[aa.length-1]; haHyzlb.setClywjm(file.getOriginalFilename()); haHyzlb.setClmc(fileName); //保存文件 publicUtils.saveFile(file, xdlj,filename, request, response); haHyzlbService.save(haHyzlb); }else{ request.setAttribute("msg", "未选择需上传的文件"); } haHyjhbService.save(haHyjhb); addMessage(redirectAttributes, "保存会议计划成功"); } return "redirect:"+Global.getAdminPath()+"/ha01/haHyjhb/?repage"; }
public static void saveFile(@RequestParam MultipartFile file,String xdlj,String filename, HttpServletRequest request, HttpServletResponse response) { String path = ""; String pdfname= filename + ".pdf"; // 装换成pdf文件的名称 String refilename= ""; // 上传文件的名称 if(!file.isEmpty()){ //获取上传文件的原名称 refilename=file.getOriginalFilename(); String aa[]=refilename.split("[.]"); filename=filename+"."+aa[aa.length-1]; xdlj=xdlj.replaceAll("\\\\", "/"); File fpath = new File(xdlj); if(!fpath.exists()){ fpath.mkdirs(); } try { MultipartFile mfile = file; if(mfile!=null){ File localFile = new File(xdlj+filename); path = localFile.getPath(); try { mfile.transferTo(localFile);//将上传文件写到服务器上指定的文件 ToPDF top=new ToPDF(); top.convert2PDF(xdlj+filename, xdlj+pdfname); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); request.setAttribute("msg", refilename+"上传失败"); } } else{ request.setAttribute("msg", "未选择需上传的文件"); } }
转换pdf工具类
package com.thinkgem.jeesite.modules.bc.bc01.web; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComFailException; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; public class ToPDF { private static final int wdFormatPDF = 17; private static final int xlTypePDF = 0; private static final int ppSaveAsPDF = 32; private static final int msoTrue = -1; private static final int msofalse = 0; /*jacob配置 * 把jacob.dll放入 Java\jdk1.5.0_06\jre\bin目录下. 把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext*/ //直接调用这个方法即可 public boolean convert2PDF(String inputFile, String pdfFile) { String suffix = getFileSufix(inputFile); File file = new File(inputFile); if(!file.exists()){ System.out.println("文件不存在!"); return false; } if(suffix.equals("pdf")){ System.out.println("PDF not need to convert!"); return false; } if(suffix.equals("doc")||suffix.equals("docx")||suffix.equals("txt")){ return word2PDF(inputFile,pdfFile); }else if(suffix.equals("ppt")||suffix.equals("pptx")){ return ppt2PDF(inputFile,pdfFile); }else if(suffix.equals("xls")||suffix.equals("xlsx")){ return excel2PDF(inputFile,pdfFile); }else{ System.out.println("文件格式不支持转换!"); return false; } } public static String getFileSufix(String fileName){ int splitIndex = fileName.lastIndexOf("."); return fileName.substring(splitIndex + 1); } public boolean word2PDF(String inputFile,String pdfFile){ ActiveXComponent app = null; Dispatch doc = null; boolean result=true; try{ //打开word应用程序 app = new ActiveXComponent("Word.Application"); //设置word不可见 app.setProperty("Visible", false); //获得word中所有打开的文档,返回Documents对象 Dispatch docs = app.getProperty("Documents").toDispatch(); //调用Documents对象中Open方法打开文档,并返回打开的文档对象Document doc = Dispatch.call(docs, "Open", inputFile, false, true ).toDispatch(); Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF //word保存为pdf格式宏,值为17 ); result= true; }catch(Exception e){ result= false; }finally { if (doc != null) { Dispatch.call(doc, "Close"); } if (app != null) { app.invoke("Quit"); } } return result; } public boolean excel2PDF(String inputFile,String pdfFile){ ActiveXComponent app = null; Dispatch excel = null; boolean result=true; try{ app = new ActiveXComponent("Excel.Application"); app.setProperty("Visible", false); Dispatch excels = app.getProperty("Workbooks").toDispatch(); excel = Dispatch.call(excels, "Open", inputFile, false, true ).toDispatch(); Dispatch.call(excel, "ExportAsFixedFormat", xlTypePDF, pdfFile ); result= true; }catch(Exception e){ result= false; }finally { if (excel != null) { Dispatch.call(excel, "Close"); } if (app != null) { app.invoke("Quit"); } } return result; } public boolean ppt2PDF(String srcFilePath, String pdfFilePath){ ActiveXComponent app = null; Dispatch ppt = null; boolean result=true; try { ComThread.InitSTA(); app = new ActiveXComponent("PowerPoint.Application"); Dispatch ppts = app.getProperty("Presentations").toDispatch(); // 因POWER.EXE的发布规则为同步,所以设置为同步发布 ppt = Dispatch.call(ppts, "Open", srcFilePath, true,// ReadOnly true,// Untitled指定文件是否有标题 false// WithWindow指定文件是否可见 ).toDispatch(); Dispatch.call(ppt, "SaveAs", pdfFilePath, 32); //ppSaveAsPDF为特定值32 result=true; // set flag true; } catch (ComFailException e) { result=false; } catch (Exception e) { result=false; } finally { if (ppt != null) { Dispatch.call(ppt, "Close"); } if (app != null) { app.invoke("Quit"); } ComThread.Release(); } return result; } }
预览文件
<c:if test="${haHyjhb.cllist ne null and haHyjhb.cllist.size() ne 0}"> </br ><h4>会议文件列表</h4></br > <table id="contentTable" class="table table-striped table-bordered table-condensed"> <thead> <tr> <th>文件名</th> <th>预览</th> </tr> </thead> <tbody> <c:forEach items="${haHyjhb.cllist}" var="haHyjhb"> <tr> <td>${haHyjhb.clywjm }</td> <td><a href="javascript:void(0);" onclick="filescan('${haHyjhb.id}')">预览</a></td> </tr> </c:forEach> </tbody> </table> </c:if>
function filescan(fileid){ top.$.jBox.open("iframe:${ctx}/ha01/haHyjhb/scan?id="+fileid, "文件预览",800,$(top.document).height()-100,{ buttons:{"确定":"ok", "关闭":true}, submit:function(v, h, f){ }, loaded:function(h){ $(".jbox-content", top.document).css("overflow-y","hidden"); }, closed:function (){ } }); }
<%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/WEB-INF/views/include/taglib.jsp"%> <html> <head> <title>资料信息管理</title> <style type="text/css"> html,body,#content{ width: 100%; height: 100%; margin: 0; padding: 0; } </style> <script type="text/javascript"> window.onload = function (){ //项目名称 var filepath="${pageContext.request.contextPath}/"+"${saMyclbClxx.lj}".split("/dxzjzx_wz/")[1]; var name="${saMyclbClxx.clmc}"; var a=name.split("."); var hzm=a[a.length-1];//后缀名 var wjm=name.split("."+hzm)[0];//文件名 if(hzm=="txt"||hzm=="doc"||hzm=="docx"||hzm=="xls"||hzm=="xlsx"||hzm=="ppt"||hzm=="pptx"||hzm=="pdf"){ filepath = filepath+wjm+".pdf"; PDFObject.embed(filepath, "#content" ); //var success = new PDFObject({ url:filepath ,pdfOpenParams: { scrollbars: '0', toolbar: '0', statusbar: '0'}}).embed("content1"); }else if(hzm=="png"||hzm=="jpeg"||hzm=="gif"||hzm=="jpg"){ $("#content").html("<img style='background-size:contain|cover;width:100%;height: auto;' src='"+filepath+name+"' id='ylimg'/>"); }else if(hzm=="wav"||hzm=="mp3"||hzm=="midi"||hzm=="wma"||hzm=="swf"||hzm=="flv"||hzm=="wmv"||hzm=="asf"||hzm=="asx"||hzm=="mid"||hzm=="rm"||hzm=="rmvb"||hzm=="mp4"||hzm=="mov"||hzm=="avi"||hzm=="ram"){ $("#content").html("<video src='"+filepath+name+"' controls='controls'></video>"); }else{ alert("该文件格式不支持预览"); } } </script> </head> <body> <ul class="nav nav-tabs"> </ul><br/> <form:form id="inputForm" modelAttribute="saSqmyxxb" action="${ctx}/sa01/saSqmyxxb/save" method="post" class="form-horizontal"> <sys:message content="${message}"/> <div id="content"></div> </form:form> <script type="text/javascript" src='${ctxStatic}/js/pdfobject.min.js'></script> </body> </html>