在windows平台下php使用imagick库把pdf转换成(合并)图片

在windows平台下php使用imagick库把pdf转换成(合并)图片

开发背景
上传的word文档需要转换成图片,在网上找了资料,主要是先转换成pdf:
1. 在windows下用com组件加上office,优点是转换后的文档基本和原来一样,缺点就是依赖于windows平台
2. 第二种是用openoffice加上Java写的jodconverter,优点是各个平台都行,缺点是如果原文档有特殊格式(公式、宏…),则转换后会丢失,而且需要开放shell权限(webservice除外)

这里主要是介绍pdf转换成图片

开发环境

安装环境

  • php就不介绍了
  • imagick: 双击安装,在出现多个复选框的时候需要把”安装目录添加到path环境变量中”、“c/c++的开发环境”勾选上,另外如果不希望默认用imagick打开图片,把相关的勾去掉。最后在安装完成后需要定义环境变量MAGICK_HOME=$magick-install-dir/modules/coders/
  • php-imagick: 把php_imagick.dll放到php安装目录/ext/下,然后修改php.ini,添加extension=php-imagick.dll。如果是全新安装php,看看extension_dir有没有定义,如果没有需要定义:extension_dir=$php-install-dir/ext
  • ghostscript:正常安装就可以,如果不安装代码运行的时候会报错
  • vcredist: 这个是vc11编译后的代码需要,可以先不用安装,先把代码写了,然后试运行,如果没有问题说明windows自带了,如果出现类似于“nnn.dll无法定位或打开”或者 “vcomp110.dll没找到”则需要安装

安装大概花了1天半,代码花了半天。安装上面已经写了,需要特别注意的就是在下载不同的库的时候需要注意由哪个vc版本编译的,以及当前windows支持哪个版本,这个可以去c盘下搜索vcomp,看看结果是什么,有没有自己需要的,如果没有,就去windows的官网下载运行时环境。

下面是代码段,仅供参考

try {
            $im = new imagick();
            $im->setCompressionQuality(90);
            $im->readImage('file.pdf');

            $canvas = new imagick();
            foreach($im as $k => $sub){
                $sub->setImageFormat('png');
                $sub->stripImage();
                $sub->trimImage(0);

                $canvas->newImage($sub->getImageWidth()+10, 
                    $sub->getImageHeight()+10+($k+1 == $im->getNumberImages() ? 10 : 0), 
                    'gray');
                $canvas->compositeImage($sub, Imagick::COMPOSITE_COPY, 5, 5);
            }

            $canvas->resetIterator();
            $canvas->appendImages(true)->writeImage($dest);
        } catch (Exception $e) {
            throw $e;
        }

下面谈谈代码
开始的时候是参照网上给出的代码段进行的,可是不太理想,有的是根本不行
1. 例如用addImage方法,最后用combineImage进行合并,这套思路试了好久,最后就是没有结果,可能方法的细节没有把握到位。
2. 用单个image进行compositeImage,这个思路需要注意的就是设置image的大小,另外在循环copy之前,需要不断改变image的大小,而我使用setSize则无法达到要求(其他方法没试),所以也很别扭。

最后无意中看到了appendImages这个方法,觉得有点暮然回首的感觉。如果不需要做特殊处理,可以不用canvas,直接调用append就行

心得:使用一个不熟的第三方库开发的时候,最好先把api大致浏览下,然后再去网上参照相关思路。还有,如果本地的文档介绍不详细,可以参照php.net上的文档, 而且上面还有有一些别人写的例子供参考。

另外附上牛人总结的关于图片压缩的文章:http://blog.lizhigang.net/archives/228

以上仅是个人经验,如有不足请指出!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要想将PDF文件转换为JPG格式,可以利用PHP中的一些和函数来实现。 首先,需要安装 `imagick` 扩展或者 `ghostscript`来处理PDF文件和图像。可以通过在终端中执行 `sudo apt-get install imagemagick ghostscript`来安装这些软件。 接下来,在PHP代码中使用 `imagick` 扩展加载PDF文件,并将其转换为图像。下面是一个简单的示例代码: ```php // 加载PDF文件 $pdf = new Imagick(); $pdf->readImage('path/to/input.pdf'); // 合并多个PDF页面为一张图像 $pdf->resetIterator(); $combinedPdf = $pdf->appendImages(true); // 将图像转换为JPG格式 $combinedPdf->setImageFormat('jpg'); // 保存转换后的图像 $combinedPdf->writeImage('path/to/output.jpg'); // 释放资源 $combinedPdf->clear(); $combinedPdf->destroy(); ``` 在这个例子中,替换 `path/to/input.pdf` 为待转换的PDF文件路径, `path/to/output.jpg` 为保存转换后的JPG文件路径。这段代码将会将PDF文件的所有页面合并为一张JPG图像,并保存到指定路径。 需要注意的是,转换PDF文件可能会消耗较多的内存和时间,取决于PDF的大小和内容复杂度。如果PDF文件过大或包含大量页面,可能需要增加PHP内存限制或者分批处理。 除了使用 `imagick` 扩展,还可以使用 `ghostscript` 调用命令行来实现PDF到JPG的转换。具体方法可以参考 `exec` 或 `system` 函数来执行 `gs` 命令,在命令中指定输入和输出文件路径即可。 综上所述,利用PHP中的 `imagick` 或 `ghostscript` 扩展和函数,可以方便地将PDF文件转换为JPG格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值