最近,有个项目要用到类似DOCIN的文档转换和阅读的功能,于是就开始找相关的资料,最后总结出2种解决办法,以下就来探讨下两种方法的各自实现。

第一种:通过FLASH PAPER来转换DOC文档直接生成SWF,这个很简单,下载一个FLASH  PAPER 安装就可以调用,我们在程序里是用CMD调用的,调用的命令是:C:Program FilesMacromediaFlashPaper 2FlashPrinter.exe xxx.ppt -o xxx.swf,不过经我测试,这个东西有很大的缺陷,不能并发几个一起用,也就是说只能同时转换一个文档,我不知道有没有其他方法能够解决这个问题,如果你有解决的办法,也请告诉我,FLASH PAPER的转换原理是这样的:建立一个虚拟打印机,打开文档,虚拟打印,取得打印的内容直接生成SWF,所以转换一个文档就需要一个虚拟打印机的运行~~~中间会弹出打印和打开文档的窗口。这个方案不符合我的要求,直接PASS。

第二种:利用开源的软件OPENOFFICE把文档转换成PDF,在通过SWFTOOLS把PDF转换成SWF,其中要用到的东西比较多,下面一一道来。这个方案可以在微软的系统下运行,也可以在*NUX下运行,我是CENTOS5.5字符界面下跑的,下面是过程:

首先安装装CENTOS5.5系统,安装过程就不再罗嗦了,我是最简安装的

装好系统后,就是把需要的软件包都下载下来:我们用到的软件包有
# wget http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u20-linux-i586.bin?BundledLineItemUUID=fdeJ_hCvMVcAAAEpabADyW5K&OrderID=JRuJ_hCvMlQAAAEpWrADyW5K&ProductID=guBIBe.oc_wAAAEnaDJHqPYe&FileName=/jdk-6u20-linux-i586.bin
# wget http://download.services.openoffice.org/files/localized/zh-cn/3.2.0/OOo_3.2.0_LinuxIntel_install_zh-CN.tar.gz
# wget http://www.swftools.org/swftools-0.9.1.tar.gz
wget http://apache.etoak.com/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz
还有一个openoffice的插件,我们所有的应用都基于它:jodconverter
下载地址是:http://sourceforge.net/projects/jodconverter/files/

好了,软件包准备好,下面就开工了⌒_⌒
先装JDK & tomcat,安装过程就不罗嗦了,不会的google下

接下来,安装openoffice,
# tar zxvf OOo_3.2.0_LinuxIntel_install_zh-CN.tar.gz
#cd OOO320_m12_native_packed-1_zh-CN.9483/RPMS
#rpm -ivh –force –nodeps *.rpm
就这样,OPENOFFICE就安装好了,如果你的系统没有中文字体,就把中文字体安装上,否则转出来的PDF会乱码

装好openoffice后,接着安装swftools,swftools安装也比较简单,

# tar zxvf swftools-0.9.1.tar.gz
#cd swftools-0.9.1
# ./configure –prefix=/usr/local/swftools/
# make && make install

到此,所有该安装的软件都已经安装好了,由于我现在是利用
下面开始把所需服务都启动起来,

先把OPENOFFICE启动起来,我们是当作服务启动的,启动命令如下
#/opt/openoffice.org3/program/soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard &

接着把TOMCAT 启动,把jodconverter做为WEB APP转换服务的,所以先把下灾下来的jodconverter-webapp-2.2.2.zip解压,把jodconverter-webapp-2.2.2.war放到TOMCAT根目录,运行TOMCAT后,会自动生成APP文件夹,为了书写简单,我们改名为converter,假设你的服务器IP为:192.168.1.123,TOMCAT端口为8080,浏览器输入:http://192.168.1.123:8080/converter/,看看转换程序运行正常不,启动正常的话,我们的工作就完成一大半了。

主要的工作已经做完,现在剩下的就是怎么应用了,我是利用PHP调用转换的程序的,用户通过PHP上传文件,
判断文件类型,如果是JPG,GIF,PNG,PDF等利用SWFTOOLS可以直接转换的文件,就直接转换,否则,通过http://192.168.1.123:8080/converter/把文件转换为PDF,再利用SWFTOOLS把PDF转为SWF,值得注意的是,PDF转SWF时候,注意把版本转化为9,如果转为9以下的版本的话,AS3操作起来会很麻烦,SWFTOOLS转换的命令如下:
#/usr/local/swftools/bin/pdf2swf  -T 9 XXX.pdf XXX.swf
其中-T是版本信息,具体可以通过#/usr/local/swftools/bin/pdf2swf -help查询

现在整个过程完成3/4了,剩下的就是用AS3写一个东西出来,操作PDF生成的SWF,生成的SWF文件格式是这样的,每一页的文档会生成一个movieclip,具体的代码我就不贴不出来了,这个相信也不难。

本来想放一个在线的DEMO的,不过我这个VPS配置太低,512M的内存,还不能自己添加swap,跑了PHP+MYSQL,就跑不动这个了,这个应用要求的内存和CPU还是蛮高的。

比较两种方法,第一种转换出来的东西应该更好,而且支持的格式更多,理论上讲,只要能打印的东西,都能转换,只是不能并发,所以意义不大,如果能利用这个原理,自己写一个转换服务器,解决并发问题,那第一种应该是最合适的。
第二种只能转换openoffice支持的格式,对服务器的要求非常的高。不知道DOCIN和BAIDU文档是怎么样的解决方案

OpenOffice.org
具有一个鲜为人知的特性就是其能够作为一个服务来运行,而这种能力具有一定的妙用。举例来说,你可以把openoffice.og变成一个转换引擎,利用
这种转换引擎你可以通过网络接口或命令行工具对文件的格式进行转换,为了将OpenOffice.org作为一个转换引擎,你必须以服务的方式将它启动,使它在某个特定的端口监听连接,在Linux平台你可以用如下的命令启动openoffice.org:

soffice -headless -accept=”socket,port=8100;urp;”

(我在linux下使用soffice
-headless -accept=”socket,host=127.0.0.1,port=8100;urp;”,open office
server是开启来了,但是文件转换不成功,异常是连接失败,这个很可以是你用jodconverter来转换时使用的是localhost,而当你的
机有host配置文件里没有将localhost与127.0.0.1对应起来时,就无法解析了,这里可以修改host文件或去掉
host=127.0.0.1,这样我试过可以成功)

在Windows平台, 使用如下命令:
“C:Program FilesOpenOffice.org 2.2programsoffice” -accept=”socket,port=8100;urp;”

使用教学: 
Step1: 安装OpenOffice 
Step2: 启动OpenOffice Service
1.   cd C:Program FilesOpenOffice.org 3program
2.   soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

copy   php_com_dotnet.dll  file to  c:/windows/system32   and   write to  php.ini   file.

extension = c:/windows/system32/php_com_dotnet.dll

★ php 根目录的 ext 文件夹下确保存有 php_com_dotnet.dll 这个文件

★ php.ini 确保有此语句
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
1
2
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
★ 开始 > 运行 > services.msc 回车 > 确保 COM+ Event System 的服务开启

openOffice将doc在线预览的更多相关文章

  1. 【OpenOffice+swftools】在线预览环境的搭建和xpdf中文包的配置

    [环境参数] Host:Win7 64bit VMware:VMware Workstation11.1.0 Client OS:CentOS release 6.5 (Final) 2.6.32-4 ...

  2. java实现word转pdf在线预览(前端使用PDF.js;后端使用openoffice、aspose)

    背景 之前一直是用户点击下载word文件到本地,然后使用office或者wps打开.需求优化,要实现可以直接在线预览,无需下载到本地然后再打开. 随后开始上网找资料,网上资料一大堆,方案也各有不同,大 ...

  3. Java实现在线预览–openOffice实现

    实现逻辑有两种: 一.利用jodconverter(基于OpenOffice服务)将文件(.doc..docx..xls..ppt)转化为html格式. 二.利用jodconverter(基于Open ...

  4. Java实现在线预览--openOffice实现

    简介 之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下. 我的实现逻辑有两种: 一.利用jodconverter(基于OpenOffice服务)将 ...

  5. SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob

    项目中有一个需求:实现文件(主要是Office文件)的在线预览,根据前端需求,Office文件需要转换成pdf或者html方可在浏览器中打开预览,那么后端需要将文件转为pdf/格式返回地址给前端.目前 ...

  6. Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

    Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...

  7. 文档在线预览开源实现方案二:OpenOffice + pdf.js

    文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...

  8. 文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper

    在文档在线预览方面,项目组之前使用的是Microsoft office web apps, 由于该方案需要按照微软License付费,项目经理要我预研一个文档在线预览的开源实现方案.仔细钻入该需求发现 ...

  9. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...

随机推荐

  1. centos+php+coreseek+sphinx+mysql之二sphinx配置篇

    先进入文件夹进行以下操作 cd /usr/local/coreseek/etc cp sphinx.conf.dist sphinx.conf source src1 { sql_host = 127 ...

  2. dedecms5.7 联动类型无法显示

    dedecms5.7 联动类型无法显示 问题原因:一般是由于路径问题( 路径缺少分隔符'/' )导致js无法正常加载 如果遇到该类问题,尝试通过firebug工具检查js是否被正确加载. 如果是路径问 ...

  3. 强大的网络通信框架(实现缓存)--第三方开源--volley

    Android Volley是Android平台上很好用的第三方开源网络通信框架.使用简答,功能强大. Android Volley的库jar包Volley.ja下载连接地址:Volley下载 下载后 ...

  4. 通过bind实现activity与service的交互

    先点bind按钮实现onCreate,在点击start给service传值(get方法) xml: <RelativeLayout xmlns:android="http://sche ...

  5. jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)

    在jQuery Mobile的布局中,控件大多都是单独占据页面中的一行,按钮自然也不例外,但是仍然有一些方法能够让多个按钮组成一行,比如说在范例6-5中就利用按钮分组的方法使4个按钮并列在一行中,如图 ...

  6. python Django 学习笔记(三)—— 模版的使用

    模版基本介绍 模板是一个文本,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何 ...

  7. Ruby处理二进制(未完成)

    https://practicingruby.com/articles/binary-file-formats http://stackoverflow.com/questions/16821435/ ...

  8. 菜鸟学习Spring——初识Spring

    一.概念. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...

  9. 通过shell脚本获取日期,并赋给变量

    通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹 代码如下: ls_date=`date +%Y%m%d` mkdir ${ls_date} 上面两句代码虽然简单 但是在 ...

  10. UIBezierPath 的使用介绍

         使用UIBezierPath类可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状 ...