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

带空格的PDF字体名引发打印机错误:修复及预防方案问询

问题描述

我负责维护一个包含大量未索引科学文献的存档,此前通过扫描纸质文档并做OCR生成可搜索文本,流程一直正常。但学校更换了无OCR功能的打印机后,我改为分开扫描和OCR,用Adobe Acrobat Pro完成OCR。起初运行正常,直到某天发现部分处理后的文档无法通过Mac Preview打印(用Adobe Acrobat打印没问题),Ricoh IM C4500打印机报错:

ERROR: undefined
OFFENSIVE COMMAND: New
STACK:
/AAAAAC+*Times
/FontName

我对PDF了解有限,通过以下步骤复现并验证了问题成因:

  • 从Preview打印为PS文件,再用Adobe Distiller重新生成PDF,复现了打印报错
  • 手动将PS文件中带空格的字体名替换为连字符形式(如Times New Roman → Times-New-Roman)后,Distiller可生成正常打印的PDF
  • 尝试用pdf2ps + ps2pdf组合处理,无需手动干预即可自动修复问题

目前无法提供最小复现示例,但问题成因已明确,现提出两个技术问题:

  1. 如何批量修复已存在该问题的大量存档文件?
  2. 如何在未来避免此类字体名问题?

需要命令行解决方案,已知可用pdffonts获取PDF字体列表,但不清楚如何修改带空格的字体名,推测需重建PDF,希望得到具体建议(比如用GhostScript完成清理)。


解决方案

1. 批量修复现有文件

方案1:使用GhostScript直接重建PDF

GhostScript可以重新处理PDF,自动标准化字体命名(将带空格的字体名转换为符合PostScript规范的形式),是最直接的批量处理方案。

单文件处理命令:

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=fixed_original.pdf original.pdf

批量处理Bash脚本:

#!/bin/bash
# 遍历当前目录下所有PDF文件,生成修复后的文件
for file in *.pdf; do
    if [[ -f "$file" ]]; then
        gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile="fixed_${file}" "$file"
        echo "修复完成:$file → fixed_${file}"
    fi
done
  • -dPDFSETTINGS=/prepress:保留较高打印质量,适合科学文献存档;若需更小体积,可改为/screen或/ebook
  • 该命令会自动处理字体名问题,无需手动修改中间文件

方案2:pdf2ps + ps2pdf批量自动化

你已验证过该组合有效,可通过脚本批量执行:

#!/bin/bash
for file in *.pdf; do
    if [[ -f "$file" ]]; then
        temp_ps="${file%.pdf}_temp.ps"
        pdf2ps "$file" "$temp_ps"
        ps2pdf "$temp_ps" "fixed_${file}"
        rm "$temp_ps" # 删除临时PS文件
        echo "修复完成:$file → fixed_${file}"
    fi
done

注意:pdf2ps和ps2pdf是GhostScript附带工具,需确保系统已安装GhostScript。

2. 未来避免此类问题

调整Adobe Acrobat Pro的OCR设置

在Acrobat中做OCR时,修改字体相关设置:

  • 打开「识别文本」→「编辑识别选项」
  • 在「输出」选项卡中,勾选「嵌入字体」,并确保字体命名采用PostScript兼容格式(用连字符/下划线替代空格)
  • 若Acrobat无直接字体命名选项,OCR完成后可使用「优化PDF」工具中的「清理字体」功能,强制标准化字体名

用GhostScript预处理OCR后的PDF

将GhostScript的pdfwrite命令集成到OCR工作流,提前标准化PDF:

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=ocr_fixed.pdf ocr_original.pdf

可通过Mac的Automator或脚本实现自动执行,无需手动操作。

优化打印流程

优先使用Adobe Acrobat直接打印问题PDF;若需用Preview打印,先通过GhostScript预处理PDF再操作。


内容的提问来源于stack exchange,提问作者Tore H-W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:12:51