php调用com组件配置 以openoffice为例
什么是com组件?
COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。
配置的目的主要是解决无法创建com对象问题,实际要实现功能word ppt xml转化为pdf
php调用openoffice中com组件配置组要分为三步
1. jdk支持,可能与这两个软件都和sun公司有关
下载地址
2. 安装openoffice
下载地址 权限的配置
.运行Dcomcnfg.exe
组件服务――计算机――我的电脑 ――DCOM配置--选择
右击--属性--
对图中两个红色标记进行配置
标示---选择交互式用户
安全--启动和激活权限和 访问权限进行配置
方式相同
进行编辑
图示
至此完成任务
下面是操作步骤:
1、 安装免费的openOffice软件,请至openoffice.org下载最新版本。
2、 JDK支持,请自行搜索下载最新版本JDK。
3、 安装完openOffice后,在开始--运行中输入Dcomcnfg打开组件服务。在组件服务—计算机—我的电脑—DCOMP配置中,选择
在这两项上分别点击右键属性,打开属性面板如下图:
选择安全选项卡,分别在启动和激活权限和访问权限两项上点自定义,添加Everyone的权限。
选择标识选项卡,选择交互式用户。
4、 安装完openOffice后,请先打开一次确认可以正常运行软件,然后退出后用命令行运行以下命令。
先到安装目录下,例如:C:\Program Files\OpenOffice 4\program\
执行命令:
soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
成功后即在后台运行了该软件。
5、 如果是php5.4.5以前版本,需要在php.ini里把com.allow_dcom = true打开,即去掉前面的分号。如果是以后版本,需要在php.ini 里增加一行扩展extension=php_com_dotnet.dll,然后检查php的ext目录中是否存在该dll文件,如果没有请自行下载对应版本的dll。然后重启apache或IIS服务器。
6、 代码实现
<?php
//PHP也可以实现导出Word文档为PDF的功能,不过要借助于第三方的类库,今天我们将为大家介绍PHP依靠com.sun.star.ServiceManager来转换Word为PDF文档的相关技巧。PHP处理Word转PDF的示例代码:
set_time_limit(0);
function MakePropertyValue($name,$value,$osm){
$oStruct=$osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
$oStruct->Name = $name;
$oStruct->Value = $value;
return $oStruct;
}
function word2pdf($doc_url, $output_url){
$osm = new COM("com.sun.star.ServiceManager")or die ("请确认OpenOffice.org库是否已经安装.\n");
$args = array(MakePropertyValue("Hidden",true,$osm));
$oDesktop = $osm->createInstance("com.sun.star.frame.Desktop");
$oWriterDoc = $oDesktop->loadComponentFromURL($doc_url,"_blank", 0, $args);
$export_args = array(MakePropertyValue("FilterName","writer_pdf_Export",$osm));
$oWriterDoc->storeToURL($output_url,$export_args);
$oWriterDoc->close(true);
}
$output_dir = "D:/temp/";
$doc_file = "D:/temps/test03.docx";
$pdf_file = "test03.pdf";
$output_file = $output_dir.$pdf_file;
$doc_file = "file:///".$doc_file;
$output_file = "file:///".$output_file;
word2pdf($doc_file,$output_file);
?>