门户文件在线预览如何实现?

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 种:

  1. 服务器先转为 PDF,在转换为 SWF,最后通过网页加载 Flash 预览; 2) 第三方 ActiveX 浏览器控件;

第三方 ActiveX 浏览器控件可以实现在线编辑,但是存在很大的缺点: 1) 客户端需要装控件

  1. 付费

  2. 国内第三方 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"/>

  1. 参数处理:

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" />

相关推荐
Prosper Lee5 个月前
React(四):DOCX文件在线预览
前端·javascript·react·docx·在线预览
PDF Reader Pro1 年前
在线预览Word、Excel、PowerPoint等文件
前端·vue.js·pdf·word·excel·在线预览