1.在线预览方案优劣介绍
1、在线预览方案客户,现在有3个方案:
a、Aspose组件,收费是2999美元,折合人民币20000左右,具体可以上官网看看:这个在线预览插件的直接获取的pdf流,
b、通过JACOB实现Office文档转换为PDF,Itextpdf实现给PDF文件加水印,PDF.js框架实现html5在线预览PDF
c、用OpenOffice插件,jodconverter进行转换
方案一:免费开源,但是需要windows服务器,某车企项目验证过
方案二:免费开源,OpenOffice转换格式得不到保障,某大型车企项目和上已经验证过
方案三:收费,优点是稳定,服务器是linux,某投行和头部新能源车企内容管理上使用过
2.免费方案介绍
重点介绍免费的方案,如下:
本文档为武汉联从信息项目交付团队,文档在线预览功能程序的开发文档。 目前,实现 Office 在线预览的方式大致有以下 2 种:
- 服务器先转为 PDF,在转换为 SWF,最后通过网页加载 Flash 预览; 2) 第三方 ActiveX 浏览器控件;
第三方 ActiveX 浏览器控件可以实现在线编辑,但是存在很大的缺点: 1) 客户端需要装控件
-
付费
-
国内第三方 ActiveX 浏览器控件基本上不支持前后端分离的系统架构, 很难集成到本项目中。
因此,我们采用第一种解决方式。即将 Office 文档转换为 PDF 文档,并 通过直接向浏览器返回 PDF 文档的输出流的方式实现在线预览。
原理:
通过 JACOB 实现 Office 文档转换为 PDF 通过 Itextpdf 实现给 PDF 文件加水印 通过 PDF.js 框架实现 html5 在线预览 PDF
3.环境信息
项目的本机环境如下:
Ø Windows 操作系统
Ø Office2016,Office2013 ØIntelliJ IDEA 2018.3.4x64 ØApache Tomcat 9.0.16
项目的开发环境如下: ØJDK 1.8
ØSpring Boot 2.1.3 ØMaven 3.3.9 ØJacob 1.19 Øitextpdf 5.5.13
项目之所以使用 Windows 平台而不是 Linux 平台是因为 Linux 操作系统使 用 OpenOffice 把 Office 文档转换为 PDF 文档,但是转换效果并不理想。 Jacob 是 Windows 平台下操作 Office 文档的一种技术,在本项目中主要 用于将 Office 文档转换为 PDF 文档。Itextpdf 是对 PDF 文档进行操作的 一种技术,在本项目中主要用于把文本文档和图片转化为 PDF 以及在 PDF 上添加水印。
4.环境搭建
4.1 安装 MS Office
Jacob 把 Office 转换为 PDF 文档的实现依赖于 MS COM 组件。所以, 本机上必须装有 MS Office 套件。由于本项目主要实现把 Word, Excel,PPT 转换为 PDF,至少要保证本机上装有这些软件。在选择 MS Office 版本时,越高越好。
MS Office 2003 及以前版本的 Office 默认的文件格式分三种,分别 是:
.doc (Word)
.xls (Excel)
.ppt (PowerPoint)
MS Office 2007 及后续版本(2010 等)默认的文件格式分三种,分别 是:
.docx (Word)
.xlsx (Excel)
.pptx (PowerPoint)
如果因为条件限制,你只能安装 MS Office 2003 及以前版本的 Office,那么你需要在本机上运行 FileFormatConverters.exe 文 件,以确保 Office 2003 可以打开 Office 2007 及以后的文件格式。
4.2 配置 Jacob
4.2.1 下载 Jacob 下载地址:https://sourceforge.net/projects/jacob-
project/
本项目下载的是 jacob-1.19.zip,解压完成后,有以下几个文 件:
将图中标记的 dll 文件放到 JAVA_HOME/bin 目录下,64 位系统就 用 x64 的 dll,32 位系统就用 x86 的 dll。
4.2.2 将 jar 包导入到项目中
在 Maven 库中没有 Jacob 的 jar 包,因此,需要我们手动导入
jar 包。
Pom.xml 文件配置如下:
其中,标记处为本机中 jacob.jar 包的路径。
5.项目开发 项目目录如下:
l FileDownloadService:实现将 PDF 文档下载到本地;
l Office2PDFService:实现将 Office 文档、文本文档、JPG 和 PNG 格式 的图片转换为 PDF 文档,以及删除文档;
l WatermarkService:实现对 PDF 文档添加水印;
l File2PDFCtrl:调用以上 3 个 Service 实现把输入文档转化为带水印的 PDF 文档。其实现逻辑如下:
Ø 创建临时文件存储目录:source 存储源文件、target 存储 PDF 文件、 final 存储带水印的 PDF 文件;
Ø 从 URL 下载文件到 source 目录下;
Ø 将 source 目录下的文档转换为 PDF,存储在 target 目录下;
Ø 给 target 目录下的 PDF 文档添加水印,存储在 final 目录下;
Ø 读取 final 目录下的带水印的 PDF 文档,将之输出到 HttpServletResponse 的 OutputStream 中。
Ø 删除在 source、target、final 目录下创建的临时文件。
l application.properties:设置服务器端口号、并发控制、设置临时文 件存储目录等。
5.问题记录
5.1Tomcat 中文支持较差
场景描述:
程序在 IDEA 上运行良好,但是将程序打包成 war 包部署到 Tomcat 上 后,FileDownloadService 出现错误,URL url = new URL(urlStr); 语句无法创建 URL 实例。
原因分析:
如果直接从 Apache 站点中下载 Tomcat,无论是安装版的 exe 文件, 还是解压缩的 ZIP 文件,内置的对于 get 协议中 的 URL 编码都是 ISO-8859-1,这个字符集不能直接支持中文等双字节的信息,而中文 文件的下载链接恰恰是通过 get 协议进行的。
解决措施:
1)修改tomcat里面的/conf/server.xml文件 找到<Connector port="8080"节点。在里面加入URIEncoding="UTF-8"属性编码 默 认编码为"ISO-8859-1"一般情况下是不支持文字参数。 修改后如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
- 参数处理:
5.2 IDEA 把项目打包发布到 Tomcat 上 dll 文件无法调 用
原因是没有把 dll 文件一并打包部署,tomcat 找不到该包。
5.3 访问路径问题
解决方法:找到在 tomcat 的 conf 中的配置文件 server.xml
<Host appBase="webapps" autoDeploy="true" name="localhost"
unpackWARs="true">
在<Host>中添加
<Context path="/FilePreview" docBase="/项目名称" reloadable="true" />