核心概念
在深入了解参数之前,需要理解 Ghostscript 的两个核心工作模式:
- 解释模式:这是 Ghostscript 的默认模式,它会读取一个 PostScript 文件,解释其中的指令,并在输出设备上生成结果,将 PostScript 渲染成位图图像或将 PDF 打印到物理打印机。
- 转换模式:这是最常用的模式之一,它将一个输入文件(如 PDF)转换为另一种格式(如 PNG, JPEG, PS),这种模式通过指定
-sDEVICE参数来实现。
基本语法
Ghostscript 的基本命令行格式如下:
gs [options] [input files] [run]
[options]: 各种参数,用于控制 Ghostscript 的行为。[input files]: 要处理的文件列表,可以是.ps,.pdf,.eps等。[run]: PostScript 代码块,如果需要在脚本执行时运行,通常在转换模式下不需要。
主要参数分类详解
输入/输出与设备控制
这是最常用的一组参数,用于指定输入、输出和转换的目标格式。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-sDEVICE |
setdevice |
指定输出设备,这是转换模式的关键。 | -sDEVICE=png16m (输出为24位PNG) |
-o |
outputfile |
指定输出文件的路径。 | -o output.png |
-sOutputFile |
setoutputfile |
与 -o 类似,但更明确地表示设置一个参数,当输出文件名包含空格或特殊字符时更安全。 |
-sOutputFile="my file.pdf" |
-dNOPAUSE |
setnopause |
禁止暂停,在批量处理多个文件或转换时必须使用,否则处理完一个文件后会等待用户按回车键。 | -dNOPAUSE |
-dBATCH |
setbatch |
执行完成后退出,通常与 -dNOPAUSE 一起使用,确保脚本在处理完所有文件后自动终止。 |
-dBATCH |
-dQUIET |
setquiet |
静默模式,减少不必要的输出信息,只显示错误。 | -dQUIET |
-dSAFER |
setsafer |
安全模式,限制文件访问和执行操作,防止恶意 PostScript 代码执行危险命令。强烈建议在生产环境中使用。 | -dSAFER |
分辨率与图像质量控制
这些参数主要用于控制输出图像的尺寸和清晰度。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-r |
resolution |
设置分辨率,单位是 DPI (每英寸点数),同时影响输入的缩放。 | -r300 (300 DPI) |
-g |
geometry |
设置输出图像的几何尺寸,格式为 宽x高,单位是像素。 |
-g1920x1080 (输出为1920x1080像素) |
-dUseCropBox |
usecropbox |
使用 PDF 的 裁剪框 来定义输出区域,这是最常用的选项。 | -dUseCropBox |
-dUseBleedBox |
usebleedbox |
使用 PDF 的 出血框 来定义输出区域。 | -dUseBleedBox |
-dUseMediaBox |
usemediabox |
使用 PDF 的 媒体框 (整个页面) 来定义输出区域。 | -dUseMediaBox |
-dUseTrimBox |
usetrimbox |
使用 PDF 的 修剪框 来定义输出区域。 | -dUseTrimBox |
重要提示: -r 和 -g 经常一起使用来精确控制输出,要生成一个 300 DPI 的 A4 页面 PDF 缩略图:
- A4 尺寸约为 2480 x 3508 像素 (300 DPI)。
- 命令:
gs -sDEVICE=png16m -r300 -g2480x3508 -o a4_thumb.png input.pdf
页面控制
用于处理多页文档中的特定页面。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-dFirstPage |
firstpage |
指定要处理的起始页码 (从 1 开始)。 | -dFirstPage=5 |
-dLastPage |
lastpage |
指定要处理的结束页码。 | -dLastPage=10 |
-sPageList |
pagelist |
指定要处理的页面列表,格式为 a-b,c,d-e,比 FirstPage/LastPage 更灵活。 |
-sPageList=1-5,7,9-11 |
高级与调试参数
这些参数用于特定场景,如调试、性能优化或特殊功能。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-dDEBUG |
debug |
启用调试输出,会打印大量内部信息,用于排查问题。 | -dDEBUG |
-sstdout |
stdout |
指定标准输出的重定向路径,Ghostscript 的日志和错误信息会写入此文件。 | -sstdout=gs_log.txt |
-dNODISPLAY |
nodisplay |
不使用显示设备,在服务器或无头环境中运行时非常有用,强制 Ghostscript 使用非交互式设备。 | -dNODISPLAY |
-dNOPROMPT |
noprompt |
不显示任何提示,与 -dNODISPLAY 类似,用于自动化脚本。 |
-dNOPROMPT |
-c |
execute |
执行一行 PostScript 代码。 | -c "quit" (执行 quit 命令) |
-f |
file |
从文件读取 PostScript 代码。 | -f commands.ps |
常见用法示例
示例 1:将 PDF 转换为高分辨率 PNG 图片
将 input.pdf 的第一页转换为 300 DPI 的 PNG 图片。
gs -sDEVICE=png16m \ -r300 \ -dFirstPage=1 \ -dLastPage=1 \ -o output_page1.png \ -dNOPAUSE \ -dBATCH \ -dSAFER \ input.pdf
示例 2:将 PDF 的所有页面转换为单独的 JPEG 图片
将 input.pdf 的每一页都转换成一个 JPEG 文件,文件名依次为 page_01.jpg, page_02.jpg...
gs -sDEVICE=jpeg \ -r150 \ -dJPEGQ=90 \ -o page_%02d.jpg \ -dNOPAUSE \ -dBATCH \ -dSAFER \ input.pdf
说明:
-o page_%02d.jpg中的%d是一个占位符,Ghostscript 会自动替换为页码。%02d表示页码用两位数字表示(如 01, 02, ...)。-dJPEGQ=90设置 JPEG 的质量(0-100)。
示例 3:将 PDF 合并为一个 PostScript 文件
将 file1.ps 和 file2.pdf 合并到 output.ps 中。
gs -sDEVICE=ps2write \ -o output.ps \ -dNOPAUSE \ -dBATCH \ -dSAFER \ file1.ps file2.pdf
示例 4:提取 PDF 文本内容
使用 txtwrite 设备将 PDF 的所有文本提取到一个纯文本文件中。
gs -sDEVICE=txtwrite \ -o output.txt \ -dNOPAUSE \ -dBATCH \ -dSAFER \ input.pdf
示例 5:只打印 PDF 的特定页面
将 input.pdf 的第 3, 5, 6 页发送到默认打印机。
gs -sDEVICE=mswinpr2 \ -sOutputFile="%printer%" \ -dNOPAUSE \ -dBATCH \ -dSAFER \ -sPageList=3,5-6 \ input.ps
注意: mswinpr2 是 Windows 平台的打印设备,Linux 上通常是 cups 或 lpr。
如何查找所有可用设备?
Ghostscript 支持数十种输出设备,你可以使用以下命令列出当前安装版本支持的所有设备:
gs -h
或者
gs --help
输出结果会很长,你可以使用 grep 来过滤你需要的设备类型,
gs -h | grep -i "device"
或者查找所有图像设备:
gs -h | grep "dev="
掌握 Ghostscript 的关键在于理解 -sDEVICE、-o、-dNOPAUSE 和 -dBATCH 这几个核心参数,然后根据需求组合使用分辨率 (-r)、尺寸 (-g) 和页面控制 (-dFirstPage) 等参数,对于自动化任务,始终记得加上 -dSAFER 来保证安全性。
