• 技术文章 >后端开发 >PHP问题

    php excel怎么转换成pdf

    藏色散人藏色散人2021-07-19 09:29:43原创81

    php excel转换成pdf的方法:首先在App下建一个文件夹Libs;然后把类库放进去,并写好命名空间;接着修改composer.json;最后在项目根目录下执行composer dump-autoload即可。

    本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

    php excel怎么转换成pdf?

    php excel转pdf

    接下来说说excel转pdf这个坑,这个是真坑啊,好多说什么用dompdf、mpdf。最后我都把phpexcel换成PhpSpreadsheet这个了,总算是转换成功了,但是问题来了,中文乱码,样式大改变,果断先放弃,看看别的办法,实在不行再回来研究。试试之前看的com加openoffice吧,这个可以实现,最开始觉得麻烦没爱用,先上代码。

    <?php
    namespace App\Libs;
     
    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;
    }
    }
     
    }

    这个方法是转发的,在这里谢过大神,想必都看到了,有命名空间,那就简单说一下laravel引用自己的类库方法吧,度娘都可以找到,在App下建一个文件夹Libs,然后把类库放进去,写好命名空间,然后在composer.json中……上代码

    "autoload": {
            "files": [
                "app/Libs/Office2pdf.php"
            ]
        }
    /*这段是加入的,如果有files直接把你的类文件路径放进去就行
    "files": [
                "app/Libs/Office2pdf.php"
            ]
    */

    然后在项目根目录下执行composer dump-autoload,然后在控制器中引用,new就行了

    use app\Libs\Office2pdf;
    $r = new Office2pdf;  //实例化后就可以用了

    逻辑好像出现了一点问题,没有告诉你们安装openoffice,去下载一个安装上,然后需要设置一下,东西都写一起了,有点乱啊,接下来上配置,百度都有教程,我也记录下来吧,方便以后自己用

    OpenOffice 安装完成之后,按 win+R 快捷键进入运行菜单,输入 Dcomcnfg 打开组件服务。

    [组件服务] >> [计算机] >> [我的电脑] >> [DCOM配置] >> [OpenOffice Service Manager]

    右键打开属性面板,选择安全选项卡,分别在 启动和激活权限 和 访问权限 上勾选自定义,添加 Everyone 的权限。权限全开

    再选择标识选项卡,勾选 交互式用户,保存设置后退出。

    安装完 OpenOffice 后,需要启动一次确认软件可以正常运行,然后再打开命令行运行以下命令:

    切换到安装目录: cd C:\Program Files\OpenOffice 4\program

    后台运行该软件: soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

    PS:该命令只需要执行一次,就可以使软件一直在后台运行,即使重启服务器也不受影响。

    接下来配置开启php扩展

    如果是 PHP5.4 以前的版本,需要在 php.ini 里把 com.allow_dcom = true 打开(即去掉前面的分号)。

    如果是 PHP5.4 之后的版本,则要在 php.ini 里增加一行扩展 extension = php_com_dotnet.dll 。

    重启 Apache 或 IIS 服务器,打印 phpinfo() 信息,检查 com_dotnet 扩展是开启。

    检查 php 的 ext 目录中 是否存在 com_dotnet.dll 文件,如果没有请自行下载对应版本的 dll。

    然后用上面的类方法就可以实现excel转pdf了,这里还有一些需要注意的就是打印区域、打印大小、是否打印到一页,这个问题要在excel模板中定义好,转换的时候会读取excel中的源数据,这个问题也难了我好久,好像就没有不难的,如果你们厉害可以研究下有没有接口可以在openoffice中设置,如果有请把链接给我,嘿嘿。

    推荐学习:《PHP视频教程

    以上就是php excel怎么转换成pdf的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:php怎么把数字转为汉字 下一篇:php 服务器跳转代码是什么
    第16期线上培训班

    相关文章推荐

    • php foreach怎么停止循环• php replace 正则替换方法• 一文详解使用PHP编写爬虫的方法• 解析ThinkPHP5如何引入Go AOP和PHP AOP编程• php怎么把数字转为汉字

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网