PHP将word文件转为图片预览

PHP将word文件转为图片预览

开发中遇到一个需求,需要在线预览word文件,在网上找到的解决方案有几种,在些做一下归类。

一、在线调用API接口直接预览

        1.  微软的接口

                https://view.officeapps.live.com/op/embed.aspx?src=你的文档地址

                可以是word,excel等office文档,直接用iframe显示即可。适用于可公开的文件。

        2. I DOC view

                和微软的接口性质是一样的,具体可参照示例:

示例 – I Doc View在线文档预览

二、PhpOffice将word转换为html然后预览

        GitHub – PHPOffice/PHPWord: A pure PHP library for reading and writing word processing documents

         以上为phpWord的Github地址,使用composer安装,然后就可以转换,不过目前遇到的问题是:

        1. 不能分页: 转换后的代码是一整串,没有进行分页。不便预览。这一点非常不好。

         2. 图片的处理:通过网上查询可以将图片上传,然后使用IMG标签显示出来。

三、将word转为pdf,然后将pdf转换为图片预览

        通过目前查询的资料,word不能直接转换为图片,需要先将图片转换为pdf。然后将pdf转换为PNG图片。

        1. 安装 imagemagick扩展(宝塔环境在扩展中直接安装即可)

        2. 安装libreoffice扩展

yum install libreoffice
yum install libreoffice-headless
yum -y install  libreoffice-langpack-zh-Han*

安装完成libreoffice后,使用下面的代码来测试登上安装是否成功:

soffice --headless --invisible --convert-to pdf 1.docx

正常情况下,会在同目录下生成一个同名的PDF文件。

更多的使用方法可自行网上查询。

要在php中执行上面的代码,需要用到php的exec命令,这时候就需要解锁exec函数,宝塔在禁用函数中找到这个删除即可。其它的在php.ini中找到disable_functions里有一个exec函数去掉。

        3.在php中word转pdf的方法 。

$result = exec("soffice --headless --invisible --convert-to pdf 1.docx");
echo json_encode($result);

       soffice –headless –convert-to 目标格式(如pdf) 转格式文件 –outdir 目标文件夹

        4. 将pdf转换为图片

public function pdf(){
        $res = $this->pdf2png('./uploads/006.pdf','./uploads/pdf/');
        dump($res);
    }
    private function pdf2png($pdf, $path)
    {
        if (!extension_loaded('imagick')) {
            return false;
        }
        if (!file_exists($pdf)) {
            return false;
        }
        $im = new \Imagick();
        $im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
        $im->setCompressionQuality(100);
        $im->readImage($pdf);
        foreach ($im as $k => $v) {
            $v->setImageFormat('png');
            $fileName = $path . md5($k . time()) . '.png';
            if ($v->writeImage($fileName) == true) {
                $return[] = $fileName;
            }
        }
        return $return;
    }

在执行的时候会发现,有一个错误提示类似下面的:

centos FailedToExecuteCommand `'gs'

这个是因为没有安装ghostscript导致的,需要在服务器上安装ghostScript.

ghostScript下载地址:

Ghostscript : Downloads

PHP将word文件转为图片预览

点击下面的源码下载然,然后上传至自己的服务器上。

安装很简单如下执行即可:

# tar -xzvf ghostscript-9.27.tar.gz
# cd ghostscript-9.27
# ./configure 
# make
# make install

 安装完成以后执行下面的命令,查看是否安装正常:

# gs --version

PHP将word文件转为图片预览

 至此就将word转换成了png图片。

                       

点击阅读全文

上一篇 2023年 6月 15日 am10:53
下一篇 2023年 6月 15日 am11:12