如何使经Ghostscript移除图像的PDF中不可见OCR文本变为可见
解决Ghostscript移除图像后OCR文本不可见的问题
当你用gs -o 'out.pdf' -sDEVICE=pdfwrite -dFILTERIMAGE 'in.pdf'移除扫描PDF的图像层后,原本不可见的OCR文本变得无法显示,核心原因是这类PDF的OCR文本被设置为和扫描背景一致的颜色(通常为白色)——有图像时文本隐藏在背景下可被搜索,移除图像后白色文本与白色背景重合,自然看不见。以下是几种可行的解决方法:
方法1:修改Ghostscript参数强制设置文本颜色
直接在Ghostscript命令中插入PostScript代码,将所有文本的颜色强制改为黑色,确保移除图像后文本可见:
gs -o 'out.pdf' -sDEVICE=pdfwrite -dFILTERIMAGE -c "/SetRGBColor {0 0 0} bind def" -f 'in.pdf'
- 解释:
-c "/SetRGBColor {0 0 0} bind def"这段PostScript代码会重定义PDF中的颜色设置命令,把所有文本的RGB颜色固定为黑色(0,0,0),覆盖原来的白色设置。 - 优势:无需额外工具,一步完成图像移除和文本可见化,同时保留原OCR文本的位置布局。
方法2:提取OCR文本生成纯文本PDF
如果不需要保留原页面的布局结构,仅需提取可编辑的文本内容,可以先提取文本再生成新PDF:
- 用
pdftotext提取OCR文本:
pdftotext 'in.pdf' 'out.txt'
- 将文本文件转为PDF(以pandoc为例):
pandoc -s 'out.txt' -o 'out.pdf'
- 优势:生成的PDF体积极小,文本完全可编辑;缺点是丢失原页面的排版布局。
方法3:预修复OCR层可见性再处理
如果需要更精细地控制文本属性,可先用PDF工具修改OCR文本的可见性,再执行Ghostscript的图像移除操作:
- 使用PDF编辑工具(如qpdf结合自定义PostScript脚本),将OCR文本的填充色改为黑色,再运行原Ghostscript命令。这种方法适合对PDF结构有了解的用户,步骤相对繁琐,但能精准调整文本样式。
内容的提问来源于stack exchange,提问作者sonofevil
相关产品推荐
相关产品推荐

