最近,有个项目要用到类似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. php判断是否为json格式的方法

    php判断是否为json格式的方法. 首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: 复制代码代码如下: function is_n ...

  2. phpMyAdmin安装

    phpMyAdmin是MySql的一个Web操作界面. phpMyAdmin官网貌似被和谐了,经常无法访问.不过我们可以从GitHub下载phpMyAdmin. 然后解压,搭建与普通的PHP网站一样. ...

  3. C++求斐波那契数

    题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...

  4. Mongodb Gridfs

    http://www.cnblogs.com/lipan/archive/2011/03/21/1989409.html

  5. 使用WIF实现单点登录Part IV —— 常见问题

    InvalidOperationException: ID1073: 尝试使用 ProtectedData API 解密 Cookie 时出现 CryptographicException (有关详细 ...

  6. dump buffer cache

    1.基础内容: ALTER SESSION SET EVENTS 'immediate trace name buffers level n'; n取值意义: 1 只转储buffer header. ...

  7. mysql数据库开发规范

    对规范的遵守可用二八原则,不要教条.为满足实际需求 可忽视部分规范. 1.索引规范 *目标 |--利用最小的索引成本找到需要的行记录 *原则 |--做前缀匹配 |--选择区分度高的列做前缀索引列 |- ...

  8. 《高性能javascript》读书笔记

    1.每个<script>加载时都会阻塞其他文件(图片.音乐等)的同时加载,同时浏览器会在js代码执行时停止渲染Dom.所以为了减少界面加载的卡顿和空白发生,应尽力将js代码或者文件放在&l ...

  9. Jquery + echarts 使用

    常规用法,就不细说了,按照官网一步步来. 本文主要解决问题(已参考网上其他文章): 1.把echarts给扩展到JQuery上,做到更方便调用. 2.多图共存 3.常见的X轴格式化,钻取时传业务实体I ...

  10. windows下python+flask环境配置详细图文教程

    本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+fla ...