zoukankan      html  css  js  c++  java
  • PHP 实现Word,excel等转换pdf

    近期做一个项目,须要将用户上传的word,excel文档转成PDF文档保存并打印。在网上找了非常多资料。并不全面,所以自己写了一份比較全面的教程来分享。

    以下是操作步骤:

    1、        安装免费的openOffice软件。请至openoffice.org下载最新版本号。

    2、        JDK支持,请自行搜索下载最新版本号JDK。

    3、        安装完openOffice后,在開始--执行中输入Dcomcnfg打开组件服务。在组件服务—计算机—我的电脑—DCOMP配置中,选择

    在这两项上分别点击右键属性。打开属性面板例如以下图:

    选择安全选项卡,分别在启动和激活权限和訪问权限两项上点自己定义。加入Everyone的权限。

    选择标识选项卡。选择交互式用户。

    4、        安装完openOffice后。请先打开一次确认能够正常执行软件,然后退出后用命令行执行下面命令。

    先到安装文件夹下,比如:C:Program FilesOpenOffice 4program

    运行命令:

    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或IISserver。

    6、        代码实现

    /**
     * office文档转换为PDF类
     * @author jinzhonghao <954299193@qq.com> created 2015-04-23
     */
    
    
    class office2pdf
    {
    	private $osm;
    	
    	public function __construct()
    	{
    		$this->osm = new COM("com.sun.star.ServiceManager")or die ("Please be sure that OpenOffice.org is installed.n"); 
    	}
    	
    	public function MakePropertyValue($name,$value)
    	{
    		$oStruct = $this->osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    		$oStruct->Name = $name;
    		$oStruct->Value = $value;
    		return $oStruct;
    	}
    	
    	public function transform($input_url, $output_url)
    	{
    		$args = array($this->MakePropertyValue("Hidden",true));
    
    		$oDesktop = $this->osm->createInstance("com.sun.star.frame.Desktop");
    
    		$oWriterDoc = $oDesktop->loadComponentFromURL($input_url,"_blank", 0, $args);
    
    		$export_args = array($this->MakePropertyValue("FilterName","writer_pdf_Export"));
    
    		$oWriterDoc->storeToURL($output_url,$export_args);
    		$oWriterDoc->close(true);
    		return $this->getPdfPages($output_url);
    	}
    	
    	public function run($input,$output)
    	{
    		$input = "file:///" . str_replace("\","/",$input);
    		$output = "file:///" . str_replace("\","/",$output);
    		return $this->transform($input, $output);
    	}
    	
    	/**
    	 * 获取PDF文件页数的函数获取
    	 * 文件应当对当前用户可读(linux下)
    	 * @param  [string] $path [文件路径]
    	 * @return int
    	 */
    	public function getPdfPages($path)
    	{
    		if(!file_exists($path)) return 0;
    		if(!is_readable($path)) return 0;
    		// 打开文件
    		$fp=@fopen($path,"r");
    		if (!$fp) 
    		{
    			return 0;
    		}
    		else 
    		{
    			$max=0;
    			while(!feof($fp)) 
    			{
    				$line = fgets($fp,255);
    				if (preg_match('//Count [0-9]+/', $line, $matches))
    				{
    					preg_match('/[0-9]+/',$matches[0], $matches2);
    					if ($max<$matches2[0]) $max=$matches2[0];
    				}
    			}
    			fclose($fp);
    			// 返回页数
    			return $max;
    		}
    	}
    
    }



  • 相关阅读:
    VSFTPD匿名用户上传文件
    shell随机数比较
    Verse For Santa ---- CodeForces
    计算机基础--整数加减运算
    Hello,Blog!
    题解 P2486 【[SDOI2011]染色】
    题解 P1047 【校门外的树】
    题解 P1339 【[USACO09OCT]热浪Heat Wave】——线段树做法
    题解 P1197 【[JSOI2008]星球大战】
    题解 P1886 【滑动窗口】
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6861690.html
Copyright © 2011-2022 走看看