Using Ghostscript

Ghostscript介绍

Ghostscript 是 PostScript®和可移植文档格式(PDF)文件的解释器。

Ghostscript 由 PostScript解释器层和图形库组成。图形库与Ghostscript系列中的所有其他产品共享,因此所有这些技术有时都称为 Ghostscript,而不是更正确的 GhostPDL。

  • GhostPDF: GhostPDF是PDF页面描述语言的解释器。
  • GhostPDL: 我们使用 GhostPDL 作为一个总称来涵盖我们的整个产品线。现在,我们将所有这些不同的产品整合到一个包中,恰当地称为 GhostPDL。除了我们现有的 PDL 模块(PS、PDF、PCL、PXL 和 XPS)之外,我们现在还添加了新模块来处理一系列常见的图像格式。安装这些后,GhostPDL 将处理 JPEG(JFIF 和 EXIF)、PWG、TIFF、PNG、JBIG2 和 JPEG2000。
  • GhostPCL: GhostPCL是PCL™和PXL文件的解释器。这包括一个连接到Ghostscript图形库的PCL/PXL解释器。
  • GhostXPS: GhostXPS是XPS(XML Paper Specfication)文件的解释器。这包括一个连接到Ghostscript图形库的XPS解释器。
  • URW Font Information: urwfonts 目录中的一组truetype字体是PCL/XL解释器正常运行所必需的,但它们不是免费软件,也不是在GNU GPL/AGPL下分发的。相反,它们可以根据禁止商业用途的AFPL许可证重新分发。

Convert PDF to Images

这里使用该 input.pdf 文件作为转换研究。测试时,现将该文件保存为input.pdf。

常用参数与含义

  • -dBATCH: 在处理完所有在命令行中命名的文件后退出,而不是进入读取 PostScript 命令的交互式循环。相当于将-c quit放在命令行末尾。
  • -dNOPAUSE: 禁用提示和每页末尾的暂停。可以理解为连续打印或连续转换文件,不会在每页渲染完毕后有命令行提示出现。
  • -sDEVICE=: 对应不同的输出类型,可以是打印机,文件类型等
  • -sOutputFile=: 输出文件参数。可以使用%d%03d作为文件模板的一部分,Ghostscript将用页码替换该部分。但请注意,并非所有设备都支持该模板。此外,由于某些设备在打开时会写入输出文件,因此可能会写入额外的空白页(pdfwrite、ps2write、eps2write、pxlmono、pxlcolor)
  • -o: 作为输出文件的一种简写。使用该参数时,会自动设置-dBATCH和-dNOPAUSE选项。
  • -r: 可以使用-rXRESxYRES-rres的格式设置输出的大小。单位: dots (or pixels) per inch
  • -sPAPERSIZE=: Ghostscript默认使用美国信纸作为其页面大小。可以使用例如-sPAPERSIZE=a4的设置进行页面大小的调整。如果不使用这个参数,则使用下面两个参数:
    • -dDEVICEWIDTHPOINTS=: 宽度
    • -dDEVICEHEIGHTPOINTS=: 高度
    • -dFIXEDMEDIA: 系统默认使用-sPAPERSIZE=设置页面大小,如果要启用宽度和高度设置,则需要包含该开关项。
  • -sPageList=: 页面范围用逗号“,”分隔。每个页面范围可以包括:
    • 单个页码。例如: -sPageList=1,3,5 ;表示只处理1,3,5页
    • 起始页码-结束页码。例如: -sPageList=5-10 ;表示从第5页开始,处理到第10页。
    • 起始页码-。例如:-sPageList=12- ;表示从第12页开始,一直处理到最后一页。
  • -dFitPage: 此选项设置-dEPSFitPage-dPDFFitPage选项。
  • -dPDFFitPage:将PDF文件缩放以适应当前设备页面大小。与-dFIXEDMEDIA选项一起使用,用于将内容调整到页面大小。
  • -dTextAlphaBits-dGraphicsAlphaBits: 针对文本和图形内容分别启用抗锯齿。允许的值为1,2或4。至越小渲染越快。
  • dDownScaleFactor: 内部渲染在输出之前按给定的整数因子按比例缩小,取值<=8。

图像大小

在控制输出不同图像大小时测试发现如下两种组合:

  • -dDEVICEWIDTHPOINTS=w -dDEVICEHEIGHTPOINTS=h -dFIXEDMEDIA -dPSFitPage: 前三个是控制页面大小,最后一个是将内容填充到页面大小。
  • -rres: 可以理解为对pdf做等比例缩放。其还有另一种形式-rXRESxYRES,可以分别控制宽和高的缩放比例。例如-r100x50,则高度会被压缩到原来的50%。 这两种组合如果在对pdf输出图像时是等比例缩放,则效果相同。
gs -sDEVICE=png16m -sPageList=4 -dDEVICEWIDTHPOINTS=960 -dDEVICEHEIGHTPOINTS=720 -dFIXEDMEDIA -dPSFitPage -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png-00.%03d.png input.pdf
gs -sDEVICE=jpeg -sPageList=4 -dDEVICEWIDTHPOINTS=960 -dDEVICEHEIGHTPOINTS=720 -dFIXEDMEDIA -dPSFitPage -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o jpg-00.%03d.png input.pdf

Convert PDF to png

  • -sDEVICE=png16m: 24-bit RGB color
  • -sDEVICE=pnggray: 8-bit grayscale
  • -sDEVICE=png256: 8-bit color
  • -sDEVICE=png16: 4-bit color
  • -sDEVICE=pngmono: black-and-white
gs -sDEVICE=png16m -sPageList=4 -r96 -o png-01.%03d.png input.pdf
gs -sDEVICE=png16m -sPageList=4 -r96 -dTextAlphaBits=1 -dGraphicsAlphaBits=1 -o png-02.%03d.png input.pdf
gs -sDEVICE=png16m -sPageList=4 -r96 -dTextAlphaBits=2 -dGraphicsAlphaBits=2 -o png-03.%03d.png input.pdf
gs -sDEVICE=png16m -sPageList=4 -r96 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png-04.%03d.png input.pdf


gs -sDEVICE=png16m -sPageList=4 -r192 -dDownScaleFactor=2 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png-05.%03d.png input.pdf
gs -sDEVICE=png16m -sPageList=4 -r384 -dDownScaleFactor=4 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png-06.%03d.png input.pdf
gs -sDEVICE=png16m -sPageList=4 -r768 -dDownScaleFactor=8 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png-07.%03d.png input.pdf

最终选择质量和大小都相对能接受的参数:

gs -sDEVICE=png16m -r96 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o png.%03d.png input.pdf

Convert PDF to jpeg

  • -sDEVICE=jpeg: JFIF standard 1.01
  • -sDEVICE=jpeggray: grayscale
  • -dJPEGQ=: 该等级可平衡压缩程度与重构时图像的保真度。较低的值会从图像中丢弃更多信息以实现更高的压缩率,因此在重构时质量会降低。int, [0,100], 默认75。
  • -dQFactor=: Adobe的QFactor质量等级,可以使用它来代替上面的JPEGQ。float, [0.0, 1.0]。默认-dJPEGQ=75-dQFactor=0.5等价。
gs -sDEVICE=jpeg -sPageList=4 -r96 -o jpg-01.%03d.jpg input.pdf
gs -sDEVICE=jpeg -sPageList=4 -r96 -dTextAlphaBits=1 -dGraphicsAlphaBits=1 -o jpg-02.%03d.jpg input.pdf
gs -sDEVICE=jpeg -sPageList=4 -r96 -dTextAlphaBits=2 -dGraphicsAlphaBits=2 -o jpg-03.%03d.jpg input.pdf
gs -sDEVICE=jpeg -sPageList=4 -r96 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o jpg-04.%03d.jpg input.pdf


gs -sDEVICE=jpeg -sPageList=4 -r192 -dDownScaleFactor=2 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o jpg-05.%03d.jpg input.pdf
gs -sDEVICE=jpeg -sPageList=4 -r384 -dDownScaleFactor=4 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o jpg-06.%03d.jpg input.pdf
gs -sDEVICE=jpeg -sPageList=4 -r768 -dDownScaleFactor=8 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o jpg-07.%03d.jpg input.pdf


gs -sDEVICE=jpeg -sPageList=4 -r192 -dDownScaleFactor=2 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dQFactor=70 -o jpg-08.%03d.jpg input.pdf

最终选择质量和大小相对能接受的参数:

gs -sDEVICE=jpeg -r192 -dDownScaleFactor=2 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -o 01.%03d.jpg input.pdf

Show PDF

  • -dBATCH: 在处理完所有在命令行中命名的文件后退出,而不是进入读取 PostScript 命令的交互式循环。相当于将-c quit放在命令行末尾。
gs -dBATCH input.pdf

Reference