在WCM中的使用百度文库模式查看附件
最后更新时间:2021年07月27日 人气:...

1 概述

  百度文库阅读模式关键技术要点就是将文档转换成SWF文件,然后用Flex开发的播放器进行播放,整个逻辑如下:

  • 用户上传Office系列文档(或者其他格式也行)

  • 保存后,系统在后台另外启动一个线程进行转换工作:

  1. 一般利用OpenOffice将文档转换成PDF

  2. 然后再利用SWFTools将PDF转换成SWF

  • 浏览是通过阅读器(在FlexPaper上改造的)阅读SWF文件

  • 发布时将SWF文件发布,然后在发布的页面调用阅读器,网民就可以按照百度阅读的方式进行文档浏览了

  TRS WCM V6.5.11474以上的版本如果文档为外部文件,并且为Office系列文档、文本文件、PDF、网页类文件,那么查看时和发布时就是百度文库模式

2 部署

2.1 安装第三方软件(Windows)

1、在WCM服务器上安装OpenOffice(以下将简称OO)

  官网地址:http://www.openoffice.org/

2、将OpenOffice服务启动

进入OO的安装目录:cd /d C:Program FilesOpenOffice.org 3program

执行服务启动命令(端口默认为8100,如果冲突请修改):soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"

3、验证OO安装成功

使用Windows任务管理器确认有soffice.exe和soffice.bin的进程

确认服务已经启动:netstat -an | find "8100"

4、从官网下载安装SWFTools

  官网地址:http://www.swftools.org/

2.2 安装第三方软件(Linux)

1、在WCM服务器上安装从官网下载的OpenOffice(以下将简称OO)

  官网地址:http://www.openoffice.org/

2、拷贝Linux缺失的字体(中文、小语种对应的字体等等)

  OO转换Office系列文档成PDF时,如果一些字体缺失,将会转换为?,为了规避问题出现,请提前将Windows上的一些字体更新到系统中,更新步骤:

  在系统目录/usr/share/fonts/下创建新的目录other

  将Windows系统中的C:WindowsFonts 目下需要的字体拷贝到/usr/share/fonts/other中

  # fc -cache /usr/share/fonts/other 更新字体缓存

3、将OpenOffice服务启动

  执行服务启动命令(端口默认为8100,如果冲突请修改):/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" –nofirststartwizard

  可以用nohup放入后台执行

4、验证OO安装成功

  确认是否有soffice的进程:ps –ef | grep soffice

5、从官网下载安装SWFTools

  官网地址:http://www.swftools.org/

2.3 增加WCM系统配置

在用户新增配置中新增或者修改已有的配置

1、OO的端口

名称:OPEN_OFFICE_PORT

内容:启动OO服务设置的端口

说明:OpenOffice的服务端口

2、SWFTools的安装路径

名称:SWF_TOOLS_PATH

内容:SWFTools的安装路径

说明:SWFTools的安装路径


2.4 站点目录的更新

需要使用一个Flash播放器 + JavaScript才可以实现百度文库的效果;

所以需要在preview、pub以及分发点的各个站点根目录下拷贝这个附件的内容:相关站点根目录下的更新.rar


2.5 细览模板的撰写要点

细览模板撰写方法和以前一模一样,系统会自动判断文档类型,另外判断是否转换生成了SWF文件;

播放器的效果HTML代码由WEB-INF/classes/swf_view.html的内容决定,可以自行修改。


2.6 使用体验

1、新建一篇文档,类型为外部文件,上传的文件为Office系列文档,保存

2、查看后台是否有异常,有异常反馈给研发解决,没有继续下一步

3、确认附件对应的文件名,在Protect对应的目录中检查是否有同名不同后缀的文件

如果不存在pdf后缀的文件,说明OpenOffice没有配置成功,重新参考上面章节进行配置

如果不存在swf后缀的文件,说明SWFTools没有配置成功,重新参考上面章节进行配置

4、点击文档列表中的类型图标进行文档查看,确认可以出百度文库阅读效果:

5、预览文档,确认可以看到百度文库阅读效果

3 相关技术要点及源码

3.0 转换PDF、SWF

3.0.1 采用JODConvertor利用OO产生PDF

  JODConvertor在网上有很多资料,不再叙述,共享一下WCM的转化代码:com.trs.util.swf.SWFCreator.toPDF()

源文件:

swfcreator源码.zip

  注意:这个包需要使用JDK1.6+,如果是一些历史遗留环境使用的JDK版本低于这个,需要安装新的JDK并设置。

3.0.2 采用命令行方式利用SWFTools产生SWF

  WCM的转化代码:com.trs.util.swf.SWFCreator.toSWF()

3.1 WCM底层处理

  WCM将Document的新增和修改,判断如果是外部文件就尝试开一个线程进行转换;

源码监听外部文件新增然后转换源码.zip

 监听器代码如下:

public void notifyOnAddObj(BaseObj _oObjAdded) throws WCMException {
 if (!(_oObjAdded instanceof Document)) {
 loggr.error("Listener[" + getClass() + "]不能监听对象["
 + _oObjAdded.getClass() + "]的新增!");
 return;
 }
 Document document = (Document) _oObjAdded;
 // 仅仅处理外部文件类型的文档
 if (document.getType() != Document.DOC_TYPE_FILE) {
 return;
 }
 // 提取出需要转换的文件
 String sFileName = document.getPropertyAsString("DOCFILENAME");
 convertToSWF(document, sFileName);
 }

3.2 前端展现

查看页面的关键代码(swf.rar):


<td class="content_inner">

<%@include file="../swf/create_swfview.jsp"%>


3.3 置标

如果文档是外部文件类型,置标

<TRS_Document Field="DOCHTMLCON"/>

会产生一段模拟百度文库阅读器的代码,代码内容由WEB-INF/classes/swf_view.html(swf_view.zip)内容决定,TRS_Document的Parser(com.trs.components.wcm.publish.tagparser.WCMTagParserDocument)进行了改造,获取对应的PDF URL方法,以便实现在线下载:

<TRS_Document Field="DOCHTMLCON" pdfurlonly="true" UrlIsAbs="true"/>

将会返回对应的PDF绝对地址

3.4 阅读器——FlexPapaer

使用参考WCM的细览展示代码:

  swf.rar中的create_swfview.jsp

WCM改造后的源码:

  flexpaper.rar

官网地址:

  http://flexpaper.devaldi.com/default.jsp

  http://code.google.com/p/flexpaper/downloads/list


热门评论