400-800-9385
网站建设资讯详细

PHP网站开发之将文档转换成pdf文件

发表日期:2019-03-19 09:17:24   作者来源:方维网络   浏览:1757   标签:PHP网站开发    
本文介绍的是在Windows系统环境下进行的PHP将text、excl、word等等文档格式转换成pdf文件格式
第一步:检查是当时的php是否开启对dcom扩展
打开php.ini,搜索php_com_dotnet和php_com_dotnet:
extension=php_com_dotnet.dll   //把前面的分号去掉
com.allow_dcom = true  //改为true
然后输出下phpinfo()
看看有没有com_dotnet
COM support enabled
DCOM support enabled
.Net support       enabled
表示COM组件开启成功
所需要的工具openoffice安装openoffice软件
在openoffice安装成功之后,需要在安装目录下porgram文件下打开cmd命令行输入
cd  /d  d:\openoffice\program
具体看你所安装的具体文件位置
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
配置openoffice服务启动和激活权限具体可以百度 这里不做介绍
下面就是代码介绍
<?php
class  OpenOffice{
     private $osm;
    
    // 构造函数,启用OpenOffice的COM组件
    public function __construct(){
        ini_set('magic_quotes_runtime', 0); // 设置运行时间
        $this->osm = new COM("com.sun.star.ServiceManager") or die("Please be sure that OpenOffice.org is installed.n");
    }
        private function MakePropertyValue($name, $value){
        $oStruct = $this->osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
        $oStruct->Name = $name;
        $oStruct->Value = $value;
          return $oStruct;
    }
    
    private 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);
    }
 
    /**
     * getPdfPages 获取PDF文件页数的函数获取,文件应当对当前用户可读(linux下)
     * @param  string $path 文件路径
     * @return int
     */
      private 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; // 返回页数
          }
      }
 
      /**
       * office文件转换pdf格式
       * @param  string $input  需要转换的文件
       * @param  string $output 转换后的pdf文件
       * @return return string 页数
       */
      public function run($input = '', $output = ''){
          if(empty($input) || empty($output)){
               return '参数错误';
          }
          $input = "file:///" . str_replace("\\", "/", $input);
          $output = "file:///" . str_replace("\\", "/", $output);
          //dump($input);
          //dump($output);exit;
          // 测试文档$input='file:///C:/wamp/www/br/Uploads/Temp/files/20181023/5bcf3e022d9ff.txt';
           // 测试文档$output='file:///C:/wamp/www/br/Uploads/Temp/files/20181023/5bcf3e022d9ff.pdf';
          return $this->transform($input, $output);
      }
 
   
    
 }
调用
 function topdf(){
   import('org.Util.OpenOffice');
  
   $file_url =$res['file_url'];     //原文件   
   $file_dir = 'E:/wamp/www'.;        //下载文件存放目录   
   $file_info=pathinfo($file_url);
   $doc_file = $file_dir . $file_url;
   $pdf_file=$file_dir.$file_info['dirname'].'/'.$file_info['filename'].'.pdf';//转换后的pdf名
   //dump($pdf_file);
   //dump($file_info);exit; 
    $open=new \OpenOffice();
   // $open->run($doc_file,$pdf_file);
    $res=$open->run($doc_file,$pdf_file);
     dump($res);
   }
 
基本上完成,开发中遇到的问题主要有
Openoffice 服务没有开启;
文件没有找到路径问题,要绝对路径
COM组件没有开启。注意开启在window系统下Openoffice开启后会很占内存,服务器配置要高一点不然就卡死
 
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/4957.html