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

如何修复Ghostscript检测到的旧PDF文件标记错误?

修复旧PDF标记错误导致的Ghostscript转换文本缺失问题

问题背景

使用Ghostscript v9.56.1转换Acrobat Distiller 3.0生成的旧PDF时,出现以下问题:

  • 页码丢失
  • PDF第22、58页(手册标注第20、56页)的Bank Gothic Light全页文本消失
  • 添加-dPDFSTOPONERROR后检测到PDF标记错误:error executing PDF token、encountered more q than Q、invalid operator used in text block、BT found inside a text block

原执行命令:

gs -sFONTMAP=/full/path/to/font-map.gs -sFONTPATH=/Users/admin/Library/Fonts -sDEVICE=pdfwrite -o Trilogy_Manual-fixed.pdf Trilogy_Manual.pdf

字体映射文件内容:

/BankGothicBT-Medium /BankGothic-Medium ;
/ZapfDingbats /ZapfDingbatsITC ;
/Futura-ExtraBold /Futura-Bold ;

修复方案

1. 用Ghostscript内置修复模式预处理PDF

先通过Ghostscript的主动修复参数生成结构更规范的PDF,再执行字体映射转换:

gs -sDEVICE=pdfwrite -o pre-repaired.pdf -dPDFSETTINGS=/prepress -dREPAIRPDF=true Trilogy_Manual.pdf

之后对pre-repaired.pdf运行原字体映射命令,可规避大部分旧PDF的结构错误。

2. 调整Ghostscript参数增强容错性

修改原命令,添加容错参数忽略非致命错误:

gs -sFONTMAP=/full/path/to/font-map.gs -sFONTPATH=/Users/admin/Library/Fonts \
-sDEVICE=pdfwrite -o Trilogy_Manual-fixed.pdf \
-dPDFSTOPONERROR=false -dNO_PDFERRORS=true -dALLOWPSTRANSPARENCY=false \
Trilogy_Manual.pdf
  • -dNO_PDFERRORS=true:强制忽略PDF规范中的非致命错误
  • -dALLOWPSTRANSPARENCY=false:禁用PS透明层处理,避免旧PDF的兼容问题
  • -dPDFSTOPONERROR=false:允许处理继续,不会因非致命错误终止

3. 补全字体映射(排除字体缺失影响)

虽然怀疑是标记问题,但缺失的Bank Gothic Light未在映射文件中定义,可能加剧渲染问题,在font-map.gs中添加一行:

/BankGothicBT-Light /BankGothic-Light ;

确保/Users/admin/Library/Fonts目录下存在对应的BankGothic-Light字体文件。

4. 用pdftk修复PDF结构

如果安装了pdftk,先通过它重新整理PDF内部结构:

pdftk Trilogy_Manual.pdf output pdftk-repaired.pdf

再对pdftk-repaired.pdf执行Ghostscript字体映射命令,pdftk能修复很多低级的PDF语法错误。

5. 尝试降级Ghostscript版本

新版本Ghostscript对旧PDF的兼容性可能不如旧版本,尝试降级到v9.2x或v9.4x系列,这些版本对Distiller 3.0生成的PDF容错性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:51:22