首页 > 代码库 > 使用Ghostscript处理图片与pdf文件
使用Ghostscript处理图片与pdf文件
1 Ghostscript处理图片
将LaTeX套件和Ghostscript命令结合使用,可以满足大部分出版物质量的矢量图处理。在Windows系统下,安装中文LaTeX套装 是最为方便和全面的选择,Ghostscript的gs命令也可以由GSview中的gswin32c.exe来代替。或者,在Windows下有 Cygwin的话,也可以从相应的Source list下载相关的软件包安装。使用Cygwin的好处是可以将其与其他许多Linux下的原生程序一起配合使用,从而在Windows系统上最大限度地 重现Linux工作环境。较为麻烦的是,Cygwin的TeX系统不包含中文字体,还需要自己手动安装和配置,具体怎么做以后再慢慢研究吧。下面将常用的 命令总结出来以备忘。
生成嵌入字体的EPS
据Snoonyzhao的说法,下面的命令可以生成嵌入字体的EPS文件:
latex file.tex
dvips -E file.dvi -o file.eps
CTeX上也提出了一个办法,不过比较麻烦些:
1. 首先,将EPS转化为嵌入了字体的PDF:
gs -dNOPAUSE -dBATCH -dNOSAFER -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dCOMPatibilityLevel=1.4 -dEPSCrop -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=file.pdf file.eps
其中,相关选项含义如下:
-sDEVICE=pdfwrite:用于指定输出设备为PDF;
-dEPSCrop:根据Bounding box裁去图片周围的空白;
-dSubsetFonts=true -dEmbedAllFonts=true:实现字体的嵌入。
2. 然后将PDF转化回EPS,就将字体嵌入了:
gs -dNOPAUSE -dBATCH -dNOCACHE -sDEVICE=epswrite -sOutputFile=file.eps file.pdf
PS/EPS转换为嵌入字体的PDF
1. PS转换为PDF(注意,这里就不能再使用-dEPSCrop选项了):
gs -dNOPAUSE -dBATCH -dNOSAFER -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dCOMPatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=file.pdf file.ps
2. EPS转换为PDF:
gs -dNOPAUSE -dBATCH -dNOSAFER -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dCOMPatibilityLevel=1.4 -dEPSCrop -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=file.pdf file.eps
将矢量图EPS/PS/PDF转换为PNG
经常需要在Word或Powerpoint中插入高清晰的图片,生成高质量的文档。但是Word或Powerpoint对EPS图片渲染的效果太差,没法看。所以,通常需要将矢量图转化为高分辨率的PNG格式。命令如下:
1. EPS到透明背景PNG:
gs -dNOSAFER -r600 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile=file.png file.eps
其中,
-r600:指定分辨率为600dpi;
-sDEVICE=pngalpha:透明背景的PNG设备。若系统不支持透明背景,则默认为白色。
2. EPS到24位16m颜色PNG:
gs -dNOSAFER -r600 -dBATCH -sDEVICE=png16m -dNOPAUSE -dEPSCrop -sOutputFile=file.png file.eps
写了一个脚本,用于上述转化:
#!/bin/bash
if [ -z "$2" ]; then
gs -dNOSAFER -r600 -dBATCH-sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile="${1%eps}png""$1"
else
gs -dNOSAFER -r$2 -dBATCH-sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile="${1%eps}png""$1"
fi
3. PS/PDF到PNG:
与上面命令基本相同,去掉-dEPSCrop即可。
利用以上EPS到透明背景PNG格式的转换,就可以充分利用LaTeX的功能,实现在Office文档中插高精度的数学公式了。若将公式生成、编号插入等相关的操作录制成Office宏,则更加智能和方便,完全可以代替MathType。同时,将上述图片转换的过程在Emacs中自动化,则可以将生成的图片插入到其他的程序中,这个功能实际上就可以代替苹果系统上的LaTeXit软件。
PDF转换为SVG
通过该项转换,则可以将生成的图片直接插入到Inkscape中。这里需要用到pstoedit,命令如下:
pstoedit -fplot-svg -ssp file.pdf file.svg
其中的-ssp选项用于保证在生成的图片中,诸如a、b等字母中的空心部分不被黑色填充。
2 Ghostscript处理pdf文件
合并多个pdf文件
gs -dNOPAUSE -sDEVICE=pdfwrite-sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf ...