在windows平台下php使用imagick库把pdf转换成(合并)图片
来源:互联网 发布:淘宝助理快递模板设置 编辑:程序博客网 时间:2024/05/21 15:07
在windows平台下php使用imagick库把pdf转换成(合并)图片
开发背景
上传的word文档需要转换成图片,在网上找了资料,主要是先转换成pdf:
1. 在windows下用com组件加上office,优点是转换后的文档基本和原来一样,缺点就是依赖于windows平台
2. 第二种是用openoffice加上Java写的jodconverter,优点是各个平台都行,缺点是如果原文档有特殊格式(公式、宏…),则转换后会丢失,而且需要开放shell权限(webservice除外)
这里主要是介绍pdf转换成图片
开发环境
- win7
- ImageMagick-6.9.1-4-Q16-x86-dll.exe (ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-6.9.1-4-Q16-x86-dll.exe)
- php_imagick-3.3.0rc1-5.5-ts-vc11-x86.zip(http://windows.php.net/downloads/pecl/releases/imagick/3.3.0rc1/php_imagick-3.3.0rc1-5.5-ts-vc11-x86.zip)
- php-5.5.25-Win32-VC11-x86.zip(http://windows.php.net/downloads/releases/php-5.5.25-Win32-VC11-x86.zip)
- vcredist_x86.exe(http://download.microsoft.com/download/9/C/D/9CD480DC-0301-41B0-AAAB-FE9AC1F60237/VSU4/vcredist_x86.exe)
- ghostscript(http://power2.onlinedown.net/down/gs906w32.zip)
安装环境
- 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
以上仅是个人经验,如有不足请指出!
- 在windows平台下php使用imagick库把pdf转换成(合并)图片
- windows下安装php使用的imagick
- PHP利用imagick把PDF转成PNG
- PHP在Windows环境下安装Imagick扩展
- PHP使用imagick扩展来合并图像
- PHP使用imagick扩展来合并图像
- php利用Imagick把pdf生成png缩略图
- Linux下使用libreoffice把doc转换成Pdf
- PHP下使用FPDF在PDF中插入图片
- php使用Imagick获取图片主色调
- php图片合并成图片、合并成pdf
- windows和Linux下安装imagick扩展(linux下支持pdf转image)
- 怎样把jpg图片转换成pdf
- 怎样把图片转换成PDF
- 怎样把图片转换成pdf
- 怎么把PDF图片转换成PPT
- 怎么把pdf页面转换成图片
- 怎么把图片转换成pdf文件格式
- 第十四周 阅读程序 2
- Rectangle Area
- 第十四周项目一——小玩文件(1)
- C#serial Port串口处理~
- 第十四周 项目2-用文件保存的学生名单
- 在windows平台下php使用imagick库把pdf转换成(合并)图片
- 第十四周【项目1 - 小玩文件】
- leetcode House Robber
- Android 开源框架Universal-Image-Loader完全解析
- 第14周程序阅读 例1
- 十四周项目一
- 第十四周项目1--小玩文件(1)
- Android注入框架你应该知道的一切------打造自己的注入框架
- 第十四周项目:小玩文件(1)