You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GhostScript压缩PDF报错求助:无法在PDF 1.3前使用XRef流

GhostScript压缩PDF报错的原因及解决方法

问题场景

在Windows 10 E系统的CMD/CLI中执行以下GhostScript命令,尝试压缩2010年生成的PDF文件:

gswin64c -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile=${1%.*}.compressed.pdf BOOK1.pdf

执行后出现错误:

GPL Ghostscript 10.03.0: Can't use an XRef stream before PDF 1.5, ignoring WriteXRefStm directive
**** Unable to open the initial device, quitting.

报错原因

  1. XRef流警告:你指定了-dCompatibilityLevel=1.3,但PDF 1.3标准不支持XRef流(交叉引用流),而GhostScript默认会尝试生成XRef流,因此触发该警告。
  2. 设备初始化失败:命令中使用了Linux Shell风格的变量替换${1%.*},Windows CMD不支持这种语法,导致输出文件路径解析失败,进而无法初始化PDF写入设备,这是程序退出的致命原因。

解决方法

1. 修正输出文件路径(核心步骤)

将命令中的${1%.*}.compressed.pdf替换为Windows CMD支持的写法:

  • 仅处理单个文件(如BOOK1.pdf)时,直接写死输出文件名:BOOK1.compressed.pdf
  • 需要通用处理时,通过CMD变量替换实现:先定义输入文件变量set "input=BOOK1.pdf",输出路径使用%input:.pdf=.compressed.pdf%

2. 解决XRef流警告

根据PDF兼容性需求选择以下任一方案:

方案A:保持PDF 1.3兼容

添加-dNOOUTPUTERSCHEMA参数,强制GhostScript不使用XRef流,适配PDF 1.3标准:

gswin64c -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dNOOUTPUTERSCHEMA -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile=BOOK1.compressed.pdf BOOK1.pdf

方案B:升级PDF兼容性版本

如果不需要严格兼容PDF 1.3,将-dCompatibilityLevel=1.3改为-dCompatibilityLevel=1.5及以上(PDF 1.5及以后支持XRef流),即可消除警告:

gswin64c -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile=BOOK1.compressed.pdf BOOK1.pdf

3. 批量处理脚本示例

需要批量处理多个PDF文件时,可编写CMD脚本:

@echo off
for %%f in (*.pdf) do (
    gswin64c -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dNOOUTPUTERSCHEMA -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile="%%~nf.compressed.pdf" "%%f"
)

内容的提问来源于stack exchange,提问作者user1597990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:26:05