• 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扩展

              

    1. yum install libreoffice
    2. yum install libreoffice-headless
    3. 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的方法 。

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

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

            4. 将pdf转换为图片

    1. public function pdf(){
    2. $res = $this->pdf2png('./uploads/006.pdf','./uploads/pdf/');
    3. dump($res);
    4. }
    5. private function pdf2png($pdf, $path)
    6. {
    7. if (!extension_loaded('imagick')) {
    8. return false;
    9. }
    10. if (!file_exists($pdf)) {
    11. return false;
    12. }
    13. $im = new \Imagick();
    14. $im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
    15. $im->setCompressionQuality(100);
    16. $im->readImage($pdf);
    17. foreach ($im as $k => $v) {
    18. $v->setImageFormat('png');
    19. $fileName = $path . md5($k . time()) . '.png';
    20. if ($v->writeImage($fileName) == true) {
    21. $return[] = $fileName;
    22. }
    23. }
    24. return $return;
    25. }

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

    centos FailedToExecuteCommand `'gs'

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

    ghostScript下载地址:

    Ghostscript : Downloads

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

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

    1. # tar -xzvf ghostscript-9.27.tar.gz
    2. # cd ghostscript-9.27
    3. # ./configure
    4. # make
    5. # make install

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

    # gs --version

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

  • 相关阅读:
    玩转NAS | 打造一个动态网关,部署OpenResty - Nginx与Lua的强强联合
    点击查看详情 | 网页版微信客户管理系统如何操作试用?
    前端面试题:new 的一瞬间发生了什么
    Java接口的相关知识
    Java 将数据导出到Excel并发送到在线文档
    项目实战— pytorch搭建CNN处理MNIST数据集
    Vue Router的安装
    PlayWright(十三) - PyTest基本使用
    感兴趣区域提取算子
    基于php家具销售管理系统获取(php毕业设计)
  • 原文地址:https://blog.csdn.net/hotlinhao/article/details/126074867