今天谈一谈关于php使用OpenOffice转换文件格式的经历,网上搜索了很多关于php对此软件的使用,但是大部分都是一个copy一个地出现,整个搜索下来都TM是一个人写的,而且都没卵用。所以今天简单介绍一个解决方案。
首先肯定先下载OpenOffice,OpenOffice这个软件能将office文件转换为pdf格式,以及许多文件格式的转换,大家自己查询详细功能,今天就拿office文件转换为pdf文件的例子讲一讲就行了,做法都是一样的。
基本思路是这样的,我使用的是通过java jar包,输入命令行的方式进行文件的格式转换。这样做有一个优点,1.简单明了,容易操作,不用考虑过多复杂而且找不到的API函数之类的东西,直接达到转换目的。话说回来,这也有一个缺点,就是文件命名不能有空格,一旦有空格,命令行就失去效果了。例如 ,假定一个命令 copy 21.txt ./test 这个拷贝21.txt文件到 当前的test目录下面,但是如果你的文件命名有空格, copy 2 1.txt ./test 虽然文件命名肯定是能通过的,但是你执行这条指令会报错,找不到指定文件。系统以为你要拷贝的文件叫 2 ,后面的1.txt可能视为参数或者非法的参数,达不到你要拷贝2 1.txt文件的目的,以至于报错就是找不到文件,没有2这个文件。
java jar包 : 点击打开链接
demo演示:点击打开链接
1.上官网, http://www.openoffice.org。下载openoffice
2.点击 Download
3. 点击下载对应操作系统版本就行了。安装和普通软件一样,这个就不一一叙述了。
4.设置权限
cmd 运行Dcomcnfg.exe->组件服务->计算机->我的电脑->DCOM配置->OpenOffice Service Manager..
5. 鼠标右击->属性,选择安全 ,和标识这2个配置。标识配置=>交互式用户,安全=>自定义,全部添加Everyone权限。
点击编辑->添加Everyone权限就行了。
6. 启动OpenOffice服务命令: 打开cmd(建议用管理员权限运行,保证服务正常开启)。 先进入OpenOffice安装目录,例如我安装的: cd C:\Program Files (x86)\OpenOffice 4\program
启动服务:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
查看进程,服务是否正常开启:
下面开始演示转换过程:
将java jar包解压,和 tran.php 处于同一级目录。以及一个测试的 test.doc文件
主要代码如下:
function tranOffice($input_file,$type="pdf"){
$input_file=iconv("utf-8", "gb2312", $input_file);
$out_file=substr($input_file, 0,strrpos($input_file, "."));
if($type!=="pdf")
$out_file=$out_file.'.html';
else
$out_file=$out_file.'.pdf';
$file="java -jar jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar "."./"."$input_file"." ./"."$out_file";
$status=exec($file);
return $status;
}
核心转换java命令行是java -jar jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 源文件 目标文件 ,即可。
首先先打开doc文件看看:
运行 tran.php:
多出了test.pdf文件,我们打开看看:
完好无损,完美转换!
缺点介绍,前面说了文件命名不能有空格。我们来试试,test.doc变为t est.doc试一下。
浏览器访问tran.php,查看目录没有产生pdf文件,转换失败。
本次经验杂谈到此结束,不懂的地方再仔细看看流程,下载我上传的demo案例,朋友们自己看看吧。