在项目开发中经常会有将“word转换为pdf”、“将word转换为图片”、将“pdf转换为图片” 的需求。
针对如上需求,写一下自己在这方面的实现:
1、word转换为pdf ,可以参考地址: http://blog.csdn.net/catoop/article/details/42527349
本文主要讲pdf 转成 图片:
首先我们要做如下准备:
1、GhostScript 安装
2、ImageMagick 安装
下面做一下分解:
一、GhostScript 安装和测试
我们先下载安装 GhostScript,官网地址:http://ghostscript.com/download/gsdnld.html(我已经下载过一个免安装版本,官方9.15版本 http://download.csdn.net/detail/catoop/8363115),这个建议大家使用官方最新版本。
安装也可以使用 yum -y install ghostscript
ghostscript的依赖包,在系统盘Packages中可以找到
(这里下载可以直接运行的版本 ghostscript-9.15-linux-x86_64.tgz ,下载解压后,直接复制到 /usr/bin 目录下,命名为gs 即可,如果/usr/bin目录下已经存在该文件,记得备份之前的文件后再拷贝过去)
安装成功后,输入命令 gs -version 如果有如下输出,说明安装成功,打印的是版本。
[root@localhost www]# gs -version
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
然后用如下命令转换输出一个pdf测试,命令:
1. gs -sDEVICE=tiffg4 -sOutputFile=igs.tiff -dMaxStripSize=8192 igs.pdf
命令1. 自动生成的像素大小1728x2292
2. gs -q -r204x196 -g1728x2156 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg4 -sOutputFile=igs1.tiff -- igs.pdf
命令2. 手动指定了像素大小1728x2156,-r204x196 -g1728x2292 参数等同于 -sPAPERSIZE=a4。
3. gs -q -r204x196 -g1728x2156 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 -sOutputFile=igs2.tiff -- igs.pdf
命令2.和3.的区别:
输出的fax压缩格式不一样,文件的大小不一样,此处测试文件结果:igs1.tiff大小约为5Kb,而igs2.tiff为24Kb。
gs -dNOSAFER -r300 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile=testfilepng/%d.png testfile.pdf
执行命令后,会有如下输出,其中Page为转换的页码,其他输出是因为一些字体问题而出现的数据,只要能输出到最后一页中间不中断,就说明文件解析转换成功,下面是我转换的一个文件的输出内容:
"-dQUIET", 安静的意思,指代执行过程中尽可能少的输出日志等信息。(也可以简写为“-q”)
"-dNOSAFER", 通过命令行运行
"-dBATCH", 执行到最后一页后退出
"-dNOPAUSE", 每一页转换之间没有停顿
"-dNOPROMPT", 没有相关提示
"-dFirstPage=1", 从第几页开始
"-dLastPage=5", 到第几页结束
"-sDEVICE=pngalpha", 转换输出的文件类型装置,默认值为x11alpha
"-g720x1280", 图片像素(-g<width>x<height>),一般不指定,使用默认输出
"-r300", 图片分辨率(即图片解析度为300dpi),默认值好像是72(未测试证实)
"-sOutputFile=/opt/shanhy/error1png/%d.png", 图片输出路径,使用%d或%ld输出页数
PS:关于 gs 命令的很多参数,需要的对照官网进行研究吧。很强大的。
二、ImageMagick 安装
下载安装 ImageMagick,官网下载地址:http://www.imagemagick.org/script/download.php ,其中有很多连接,找一个能下载的下载安装(都是国外网站,需要的就拨一下VPN吧)
还可以使用 yum -y install ImageMagick
ImageMagick的依赖包,在系统盘Packages中可以找到
安装成功后,使用命令 convert -version 查看ImageMagick 版本号,验证是否安装成功,如下:
[root@localhost www]# convert -version
Version: ImageMagick 6.7.8-9 2019-02-01 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
执行命令,进行pdf转换测试:
convert pdf_name.pdf image_name.jpg //可指定路径
convert pdf_name.pdf[0] image_name.jpg //指定转换pdf的第一页
convert -resize 1800x -density 150 -quality 100 pdf_name.pdf image_name.jpg
-resize 1800x 指定生成的像素大小,越大生成的图片越大,转化的时间越久
-density 150 参数指定密度,具体含义再查
-quality 100 指定生成图片的质量
至此,ImageMagick 安装和测试完成。
有的朋友可能会问,上面我们使用 ghostscript 已经可以转换文件图片,为什么还要安装ImageMagick呢?
这里解释一下:ImageMagick 的 convert 命令重点和强大之处是图片的处理能力,很多时候,我们需要直接对pdf转换出来的图片进行处理。这种情况下,使用 convert 命令会满足我们很多需求,关于 convert 命令的很多参数,大家查看关于 ImageMagick 的资料了解,这里也不做赘述。
另外说一下:convert 命令直接把pdf 转换为图片,是依赖的 ghostscript 库,所以 ghostscript 可以单独进行图片转换,而 convert 在安装ghostscript 之前,只能进行单独的图片处理,不能直接转换 pdf 为图片。
最后跟大家提一下,在我们的业务应用实现中,建议大家讲文件转换的命令写到shell 脚本中,使用程序调用脚本。虽然也可以通过代码调用 api 实现,不过我觉得还是使用系统的shell 处理,效率会高一些。