仿百度文库,office转pdf核心转换功能

原创内容,转载请注明出处
QQ空间地址:http://user.qzone.qq.com/269832017/blog/1398936609
csdn链接:http://blog.csdn.net/xuping19940812/article/details/24841717


演示视频地址:http://v.youku.com/v_show/id_XNzA2MjMyNzM2.html

项目百度网盘链接

       这是SRP(大学生研究计划项目)中的一个模块,目的是把office文档转换为pdf,发现网上没有一个完整的教程。下面我把我的过程写一下,一来为了作为笔记,二来给新手一点福利(我自己也是新手,费了好大的劲)。

目前为止,是在linux下,我用的环境是ubuntu14.04(12+的版本应该都没问题)+libreoffice(openoffice也一样)+JODConverter3.0+php

以后会加上windows环境下的内容


1、实现原理思路

要实现 word 等文档在线阅读,需要将文档转换成 pdf,然后在把 pdf 格式的文件转换为 swf 的格式。或者直接在页面上阅读显示,这就要用到 pdf.js

用到的软件:

  •   libreoffice(openoffice)<开源的office套件>这两个本来是一个,后来分家了,所以对它们的基本控制都一样。我这里用的是libreoffice,因为ubuntu自带的。
  •  libreoffice(openoffice)的SDK  ,即开发套件包
  •  JODConverter     (开源的一個Java的OpenDocument 文件转换器
  • jdk( java环境)
2、下载软件

       百度网盘链接

      官网下载:

               libreoffice   (SDK) 

               openoffice  (SDK

               JODConverter

               jdk


 3、环境配置

                安装顺序为Java JDK ,libreoffice主程序,libreoffice sdk,jodconverter

(1)安装jdk(安装过的的童鞋可以忽略)

下载系统对应位数32或64的jdk,我下的是tar.gz 格式的。

解压之后用root权限放在/opt目录下,改名字为jdk-7-sun(这是我的个人喜好,配置方法有很多种,可以自行搜索)


配置java环境
用以下指令,或者用sudo nautilus命令在图形界面找到  /etc/profile文件,然后添加内容
      vi  /etc/profile

添加以下内容到文件尾部

    JAVA_HOME=/usr/java/jdk1.7.0_45

    JRE_HOME=/usr/java/jre1.7.0_45

    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    export JAVA_HOME JRE_HOME PATH CLASSPATH

接着使生效

    source profile

修改java命令

    update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.7.0_45/bin/java" 90

修改javac命令

   update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk1.7.0_45/bin/javac" 90

更改java各版本运行优先级

    update-alternatives --config java

    出现已经安装的多个Java版本,选择相应序号就可设置哪个java作为最高优先级运行了。
   
更改javac各版本运行优先级(同上)  

   update-alternatives --config javac
解决像这样的问题 bash:/opt/jdk-7-sun/bin/java: 权限不够 的问题

root@xmax-K43TK:~$ chmod +x/opt/jdk-7-sun/bin/java

(2)安装libreoffice(openoffice)主程序-----用ubuntu,自带libreoffice的童鞋不用看了

ubuntu自带libreoffice就不用安装了,这里我详细说下openoffice。

1.卸载libreoffice(libreoffice和openoffice有依赖包冲突问题

如果在软件中心卸载libreoffice,会没有卸载干净,需要使用下面命令,或者直接使用下面的命令

dpkg --get-selections |grep office


找到了很多关于office的,还等什么,把里面有关libreoffice的统统清理掉。命令

sudoapt-get purge libreoffice*


下载openoffice4tar.gz格式de的安装包,解压出openoffice4文件夹,在终端转到该目录下的zh-CN/DEBS进入到openoffice的程序目录,

执行dpkg-i *.deb 安装所有.deb格式的文件。为了保险起见,然后转到zh-CN/DEBS/desktop-integration目录下,执行dpkg-i *.deb

(3)安装sdk并启动服务

安装 libreoffice/openofficesdk,下载对应版本的sdk,解压之后转到en-US/DEBS进入到程序安装文件目录

dkpg-i *.deb安装deb文件

安装位置:openoffice软默认安装在/opt/openoffice4

启动服务:

libreoffice 启动服务/usr/lib/libreoffice/program/soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard &

openoffice启动服务/opt/openoffice4/program/soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard &

可以用netstat-a | grep 8100 命令来查看端口,或者ps-ef|grep soffice 查看程序进程,还可以用netstat-natulp查看是否有8100端口

然后将libreoffice/openoffice设置为开机启动:

libreoffice/usr/lib/libreoffice/program/soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard &添加到/etc/rc.local文件里

openoffice/opt/openoffice4/program/soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard & 添加到/etc/rc.local文件里

(4)安装 jodconverter

JODConverter其实不用安装解压了就行,安装了这个之后就已经可以实现DOCPDF了。

jodconverter.zip解压

mv jodconverter /opt移动到/opt目录下

接下来,就可以测试将docxls pptx 等文件转换为pdf文件了:

其中蓝色为源文件(要转换的文件)红色为目标文件(我们需要的pdf文件)

java-jar /opt/jodconverter/lib/jodconverter-core-3.0-beta-4.jar/home/xmax/a.doc/home/xmax/1.pdf

注意:文件名一定是英文或数字

<---------------------------------------------到此为止,文件转换的环境配置已经完成----------------------------------------->

4.php环境配置

环境包括apache2、php5、mysql5,有经验的可以分别安装,新手推荐下面的方法

Ubuntu一键安装LAMP


第一步:sudoapt-get upgrade


第二步:apt-getinstall tasksel


第三步:sudotasksel install lamp-server

这个过程中会让你设置mysql的root密码,输入两次,等待。。。

OK!

一键卸载LAMP命令sudo tasksel removelamp-server

安装phpmyadmin来管理mysql:apt-get install phpmyadmin

浏览器中输入localhost/phpmyadmin 出来phpmyadmin的登陆界面

5.php实现文档上传、转换、显示

apache2的默认网站目录在/var/www,我们新建站点还要开虚拟主机的,也挺麻烦,毕竟我也是新手,索性把www目录改成777权限(任何人可读可写)

我们可以用上面的方法sudo nautilus命令在图形界面中更改

在linux下,由于文件的权限问题,需要更改文件权限,找到这个文件夹右键->属性->权限->更改包含文件的权限,文件全部改成“读写”,文件夹全部改成“可以创建和删除”。

上传模块我用的是uploadify,其实我也不太会用,毕竟新手嘛,于是我就在网上找的一个有完整的上传保存的demo,在此基础上进行修改。

我把文件夹名字改为 up 了,以此当做工作目录

在uploadify.php中加入如下函数

function converter($fn){
  $outName = date('YmdHis').'.pdf';  //通过获取时间作为pdf文件名
  setcookie('outName',$outName);   //把文件名存入cookie
  $doc = '/var/www/html/wenku/up/uploads/'.$fn;   //源文件
  $formatName = '/var/www/html/wenku/up/pdf/'.$outName;  //目标文件
  $command = 'java -jar /home/xmax/jodconverter/lib/jodconverter-core-3.0-beta-4.jar '.$doc.' '.$formatName.' 2>&1';/*使用 2>&1, 命令就会输出shell执行时的错误到$output变量, 输出该变量即可分析*/
		 
		exec($command,$output,$return_val);

		//输出shell执行时的输出
		//print_r($output);
		//输出是否成功,0成功,1失败
		//echo $return_val;
   
}

调用上面的converter函数

<span style="color:#454545;">if (move_uploaded_file($tempFile, $path.$fileName)){
                        </span><span style="color:#cc0000;">converter</span><span style="color:#454545;">($fileName);
		

		echo $fileName."上传成功!";
	}else{
		echo $fileName."上传失败!";
	}</span>
提交文件,并上传转换成功后就可以在页面中显示,因为目前阶段我们没有用到数据库,所以把文件名记录在cookie中。

OK,现在用到pdf.js这个神奇的软件了

把下载的pdf.js 项目放到工作目录,找到web/viewer.html,然后我擦,好多,没仔细看,直接找加载文件的路径,找了半天也没见,后来在viewer.js中找到了var DEFAULT_URL =,啊!这就是文件路径啊,可是我不知道如何把php的变量传到js文件中(有牛逼的大神给说下)。于是我把两个文件viewer.html和viewer.js合一起放到viewer.php中,这样就好了嘛。就是文件有点大。


然后稍微改动下,在viewer.php最前面加入

$a='/wenku/up/pdf/'.$_COOKIE['outName'];
然后改下 var DEFAULT_URL 的值

var DEFAULT_URL = "<?=$a?>";

木有错,完成了!

哦,对,工作目录下的index.php中加入一句

<a href="view/web/viewer.php">查看文档</a>

这样上传成功后点击 ‘“查看文档”就可以看到啦!!!






     

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值