php实现pdf,word,excel,ppt转图片的功能
发表人:金马 | 2023-11-12

php实现pdf,word,excel,ppt转图片需要采用几个插件实现。

一、imagemagick插件

imagemagick插件是图片处理插件,当下工作中图片处理使用率越来越高,在图像处理库中,php imagick扩展是一款非常实用的工具,它可以对图片进行格式转换、调整大小、添加水印等多种操作。但是,由于其安装过程相对较为复杂,很多开发者对该扩展的使用还存在一些困惑。

linux系统下命令安装方式

sudo apt-get install imagemagick

当然如果服务器安装有宝塔面板的话,可以在php管理中直接点击安装,如下图:

image.png

imagemagick插件能把pdf转成jpg或png图片,php实现代码如下:

    // PDF 文件路径
    $pdf = 'exp.pdf';
    $path = 'pdf/';//生成图片目录
    $im = new Imagick();
    $im->setResolution(300, 300); //设置分辨率 值越大分辨率越高
    $im->setCompressionQuality(100);
    $im->readImage($pdf);
    foreach ($im as $k => $v) {
        $v->setImageFormat('jpg');
        $fileName = $path . md5($k . time()) . '.jpg';
        if ($v->writeImage($fileName) == true) {
            echo $fileName;
        }
    }


二、unoconv插件

随着科技的不断进步,文档的处理已经成为了一项必不可少的工作,而众所周知,最常用的文档格式无疑是Microsoft Office的.doc和.docx格式,而在服务器端,我们无法通过Office软件直接进行文档的转换和处理,这时候就需要借助于Unoconv工具来解决这个问题。本文将对Unoconv进行详细讲解,并给出一些实用的应用案例供大家参考。

Unoconv是一个基于OpenOffice核心结构的文档转换工具,通过Unoconv我们可以在服务器端进行大部分的Office文档文件转换操作,比如将.doc转换成.docx格式,或是将.pdf转换成.doc格式等。现在,让我们来看看具体怎么使用Unoconv来实现文档转换的过程。

首先,我们需要在服务器端安装Unoconv。如果你的服务器是Debian/Ubuntu系统,可以通过以下命令进行Unoconv安装:

sudo apt-get install unoconv

如果你的服务器是Red Hat/CentOS系统,则需要使用以下命令进行安装:

sudo yum install unoconv libreoffice-headless

测试是否成功命令

convert -version

通过unoconv可以把大部分的Office文档文件转成pdf,代码如下:

$origin_file = 'test.doc';  //原始文档文件名称
$target_file = 'test.pdf';   //转换后文档文件名称
$command = 'unoconv -f pdf ' . $origin_file;   //Unoconv命令
exec($command);     //执行Unoconv命令
rename('test.pdf', $target_file);   //重命名

执行以上还需把exec在禁用函数中取消,有的资料还建议把php.ini的safe_mode设置成On模式,我的是php 5.6版本是不需要这步。

但是在php执行后发觉并没有生成pdf文档,而在shell命令下能够正常生成。

把命令代码加上参数,查看报错:

$command = 'unoconv -f pdf ' . $origin_file .' 2>&1';   //Unoconv命令
exec($command,$res, $rc);
print_r($res);

这样运行后提示如下:

Traceback (most recent call last):
File "/usr/bin/unoconv", line 1205, in <module>
run()
File "/usr/bin/unoconv", line 1115, in run
office_environ(of)
File "/usr/bin/unoconv", line 202, in office_environ
os.environ['PATH'] = realpath(office.basepath, 'program') + os.pathsep + os.environ['PATH']
File "/usr/lib64/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'PATH'

各类加权限,各类操作,均无果,正当想放弃的时候,看到KeyError:'PATH',是不是在WEB运行环境导至路径问题呢,马上改代码:

$origin_file = 'word.docx';  //原始文档文件名称
$target_file = 'word.pdf';   //转换后文档文件名称
$command = 'PATH=/sbin:/bin:/usr/sbin:/usr/bin unoconv -f pdf ' . $origin_file ." 2>&1";   //Unoconv命令
exec($command,$res, $rc);     //执行Unoconv命令

最终看到了生成的word.pdf文件

下载文件打开一看,又出问题了,文档是乱码的,如下图:

word.docx内容是:

image.png

word.pdf内容是:

image.png

继续解决问题。

我来说两句(0)
:zui: :wink: :twisted: :roll: :oops: :mrgreen: :love: :lol: :jidong: :idea: :han:
发表评论(Ctrl+Enter)
—— 金马科技公众号 ——
十二年 行业积累

砥砺前行路上,有您关注,相聚相研共话成长!

如有意向,请与我们联系

办公电话:0774-3838278 / QQ:154727262 / 微信:wztmma