PHP 實現Word,excel等轉換pdf

jopen 9年前發布 | 97K 次閱讀 PHP PHP開發

最近做一個項目,需要將用戶上傳的word,excel文檔轉成PDF文檔保存并打印,在網上找了很多資料,并不全面,所以自己寫了一份比較全面的教程來分享。

下面是操作步驟:

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

</div>

成功后即在后臺運行了該軟件。

 

5、        如果是php5.4.5以前版本,需要在php.ini里把com.allow_dcom = true打開,即去掉前面的分號。如果是以后版本,需要在php.ini 里增加一行擴展extension=php_com_dotnet.dll,然后檢查php的ext目錄中是否存在該dll文件,如果沒有請自行下載對應版本的dll。然后重啟apache或IIS服務器。

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;  
        }  
    }  

}  </pre><br />

來自:http://blog.csdn.net/jzh2004/article/details/46440799

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!