首页 > 代码库 > 使用Ghostscript处理图片与pdf文件

使用Ghostscript处理图片与pdf文件

<style></style>

1 Ghostscript处理图片

LaTeX套件和Ghostscript命令结合使用,可以满足大部分出版物质量的矢量图处理。在Windows系统下,安装中文LaTeX套装 是最为方便和全面的选择,Ghostscriptgs命令也可以由GSview中的gswin32c.exe来代替。或者,在Windows下有 Cygwin的话,也可以从相应的Source list下载相关的软件包安装。使用Cygwin的好处是可以将其与其他许多Linux下的原生程序一起配合使用,从而在Windows系统上最大限度地 重现Linux工作环境。较为麻烦的是,CygwinTeX系统不包含中文字体,还需要自己手动安装和配置,具体怎么做以后再慢慢研究吧。下面将常用的 命令总结出来以备忘。

生成嵌入字体的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

经常需要在WordPowerpoint中插入高清晰的图片,生成高质量的文档。但是WordPowerpointEPS图片渲染的效果太差,没法看。所以,通常需要将矢量图转化为高分辨率的PNG格式。命令如下:

1. EPS到透明背景PNG

gs -dNOSAFER -r600 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile=file.png file.eps

其中,

  • -r600:指定分辨率为600dpi

  • -sDEVICE=pngalpha:透明背景的PNG设备。若系统不支持透明背景,则默认为白色。

2. EPS2416m颜色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/PDFPNG

与上面命令基本相同,去掉-dEPSCrop即可。

利用以上EPS到透明背景PNG格式的转换,就可以充分利用LaTeX的功能,实现在Office文档中插高精度的数学公式了。若将公式生成、编号插入等相关的操作录制成Office宏,则更加智能和方便,完全可以代替MathType。同时,将上述图片转换的过程在Emacs中自动化,则可以将生成的图片插入到其他的程序中,这个功能实际上就可以代替苹果系统上的LaTeXit软件。

PDF转换为SVG

通过该项转换,则可以将生成的图片直接插入到Inkscape中。这里需要用到pstoedit,命令如下:

pstoedit -fplot-svg -ssp file.pdf file.svg

其中的-ssp选项用于保证在生成的图片中,诸如ab等字母中的空心部分不被黑色填充。

2 Ghostscript处理pdf文件

合并多个pdf文件

gs -dNOPAUSE -sDEVICE=pdfwrite-sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf ...