windows怎么用 Ghostscript修复 PDF 复制乱码(对于测试文件效果不行)

60 次阅读

本文最后更新于 2026年5月4日。

要在 Windows 上测试 Ghostscript 修复 PDF 乱码的效果,你可以按照以下步骤进行。由于你之后可能要在 Go 项目中通过 os/exec 调用它,建议先通过**命令行(CMD/PowerShell)**跑通逻辑。

1. 下载与安装

  1. 前往 Ghostscript 官网下载页

  2. 选择 Ghostscript AGPL Release 下的 Windows (64 bit) 版本。

  3. 安装时建议记下安装路径(默认通常是 C:\Program Files\gs\gs10.xx.x\bin)。

2. 配置环境变量(关键)

为了能直接在任何地方输入 gswin64c 运行:

  1. 右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。

  2. 在“系统变量”中找到 Path,点击编辑。

  3. 添加 Ghostscript 的 bin 文件夹路径(例如 C:\Program Files\gs\gs10.03.0\bin)。

  4. 确定后,重启你的命令行工具(如 PowerShell 或 CMD)。

3. 测试修复乱码的“蒸馏”命令

打开 PowerShell,进入你 PDF 文件所在的目录,执行以下命令:

PowerShell

gswin64c -o fixed.pdf -sDEVICE=pdfwrite -dNoOutputFonts=false -dBATCH -dNOPAUSE input.pdf

参数详解:

  • gswin64c: Windows 下的命令行版可执行文件(gswin64 是带窗口版,不建议用于自动化)。

  • -o fixed.pdf: 输出文件名。

  • -sDEVICE=pdfwrite: 使用 PDF 写入器,这是重新构建 PDF 结构的核心。

  • -dNoOutputFonts=false: 非常重要。设置为 false 表示尽量保留原始字体库并尝试重构 ToUnicode 映射。如果设置为 true,文字会变成“路径”(图片),虽然不乱码了但无法选中文字,不适合翻译。

  • -dBATCH -dNOPAUSE: 让程序处理完后自动退出,不等待用户输入。


4. 专项增强测试(针对中文乱码)

如果上面的命令无效,尝试加入以下参数来强制 Ghostscript 重新编码:

PowerShell

gswin64c -o fixed_pro.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.4 -dEmbedAllFonts=true -dSubsetFonts=true -dBATCH -dNOPAUSE input.pdf
  • -dPDFSETTINGS=/prepress: 使用印刷质量预设,这会强制嵌入所有字体并重新校对字符表。

  • -dCompatibilityLevel=1.4: 降低版本兼容性有时能强制转换器使用更标准的编码方式。


5. 验证结果

  1. 打开生成的 fixed.pdf

  2. 尝试选中文字并复制到记事本。

  3. 对比:如果复制出来不再是乱码,说明修复成功。

6. 进阶:在 Go 中快速封装

一旦你在命令行测试成功,就可以在你的 Go 项目里直接套用这个命令了。由于 Windows 下路径带空格(如 Program Files),在 Go 代码里建议这样写:

Go

package main

import (
	"os/exec"
)

func main() {
	// 在 Windows 上建议指定完整路径,或者确保已加入环境变量
	cmd := exec.Command("gswin64c", 
		"-o", "output.pdf", 
		"-sDEVICE=pdfwrite", 
		"-dNoOutputFonts=false", 
		"-dBATCH", "-dNOPAUSE", 
		"input.pdf")
	
	err := cmd.Run()
	if err != nil {
		panic(err)
	}
}

提示:

如果经过 Ghostscript 蒸馏后的 PDF 依然乱码,那就说明原文件的文字编码信息已经彻底丢失。这种情况下,你不需要再尝试任何修复工具,请直接转向你之前的方案:用 Umi-OCR 强行识别图片文字