此方案已上线使用超过半年了,运行良好。因为使用wps转pdf,所以预览看到的和wps打开看到的完全一样。有个问题是必须部署在windows服务器上。因为转换需要时间,建议将转换后pdf保存起来,下次预览时只需要直接打开此文件。
预览的效果
预览原理
把office文件转为pdf文件,然后再用pdf.js插件预览pdf文件。
软件环境
WPS:最新版(所以服务器必须为windows。原理:通过wps把office文件转成pdf,安装微软的office也可以)
jacob1.19:下载地址 https://udomain.dl.sourceforge.net/project/jacob-project/jacob-project/1.19/jacob-1.19.zip
pdf.js:最新版
必要操作
需要把jacob-1.19-x64.dll文件放到jre/bin目录下。如下图,tomcat启动时会打印出Java Home目录,放到这个目录的bin目录下即可。
参考代码
这里只随便贴一段,具体用法可自行搜索,网上有一大把。
/** * excel转pdf */ public String wordToPDF(String src) { ActiveXComponent app = null; Dispatch doc = null; try { app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", new Variant(false)); app.setProperty("AutomationSecurity", new Variant(3)); Dispatch docs = app.getProperty("Documents").toDispatch(); doc = Dispatch.call(docs, "Open", new Object[] { src, Boolean.FALSE, Boolean.TRUE }).toDispatch(); String target = getTarget(src); Dispatch.call(doc, "SaveAs", new Object[] { target, Integer.valueOf(17) }); return target; } finally { if (doc != null) { try { Dispatch.call(doc, "Close", new Object[] { Boolean.FALSE }); } catch (Throwable t) { t.printStackTrace(); } } if (app != null) { try { app.invoke("Quit"); app.safeRelease(); } catch (Throwable t) { t.printStackTrace(); } } } }
错误解决
异常:om.jacob.com.ComFailException: Can't get object clsid from progid
解决方案:在服务-->tomcat-->登录:配置登录身份。如下图:
异常:运行一段时间后,突然无法预览附件了,系统无明确报错信息。
解决方案:结束掉wps进程再重新启动wps后,竟然解决问题了。