本文最后更新于 2026年5月4日。
要在 Windows 上测试 Ghostscript 修复 PDF 乱码的效果,你可以按照以下步骤进行。由于你之后可能要在 Go 项目中通过 os/exec 调用它,建议先通过**命令行(CMD/PowerShell)**跑通逻辑。
1. 下载与安装
-
选择 Ghostscript AGPL Release 下的 Windows (64 bit) 版本。
-
安装时建议记下安装路径(默认通常是
C:\Program Files\gs\gs10.xx.x\bin)。
2. 配置环境变量(关键)
为了能直接在任何地方输入 gswin64c 运行:
-
右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
-
在“系统变量”中找到 Path,点击编辑。
-
添加 Ghostscript 的
bin文件夹路径(例如C:\Program Files\gs\gs10.03.0\bin)。 -
确定后,重启你的命令行工具(如 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. 验证结果
-
打开生成的
fixed.pdf。 -
尝试选中文字并复制到记事本。
-
对比:如果复制出来不再是乱码,说明修复成功。
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 强行识别图片文字。