首页 > 解决方案 > Ghostscript - 字符编码问题

问题描述

我的扫描仪已经 OCRed 了一个 PDF/A 文档。该文件有点倾斜,所以我用 ghostscript 将它旋转 1 度,如下所示:

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
   -dPDFSETTINGS="/screen" \
   -dSubsetFonts=true -dEmbedAllFonts=true \
   -sPAPERSIZE=a4 -sOutputFile="out.pdf" \
   -c "<</BeginPage{1 rotate}>> setpagedevice" \
   -f in.pdf

(这是另一个 SO 线程的改编片段)

它的工作很好,但是文本编码不正确 - 当我从原始文档中复制并粘贴带有波兰语字母的单词(ąśćęłńźż)时,一切正常,但是当我复制并粘贴相同的单词时上面的命令生成的 PDF,这个波兰字母转换为“~”(“opłata”->“op~ata”、“wpłynęło”->“wp~yn~~o”)。如何保存文本?我真的需要它保持不变。

编辑:上述命令的输出:

GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 3.
Page 1
Loading NimbusSans-Regular font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Regular... 5076560 3564226 2614872 1261064 3 done.
Loading NimbusSans-Bold font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Bold... 5142672 3737333 2635072 1280462 3 done.
Loading NimbusSans-Italic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Italic... 5310168 3943119 2816872 1460233 3 done.
Loading NimbusSans-BoldItalic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-BoldItalic... 5497480 4140597 3059272 1695969 3 done.
Page 2
Page 3

标签: pdfencodingutf-8ghostscriptpostscript

解决方案


那么首先要尝试的是不要设置 SubsetFonts=true。

如果您的原始 PDF 文件没有 ToUnicode CMap,那么您依赖于“启发式”(又名猜测)来确定给定字符编码的 Unicode 点。

如果您的原始文档有效,那么字符编码很可能与 ASCII 或类似的东西匹配。但是,当您对字体进行子集化时,编码会发生变化。本质上,遇到的第一个字符成为编码位置 1,第二个是 2,依此类推。

当您尝试剪切和粘贴时,这自然会导致问题。

但是,鉴于您使用的是正常 ASCII 范围之外的字符,这不太可能是问题所在。

您可能使用的是旧版本的 Ghostscript+pdfwrite(您实际上并没有说您使用的是什么版本,也没有提供会说的反向通道输出)及其错误已修复。

但坦率地说,如果没有看到输入的 PDF 文件,任何人都几乎不可能弄清楚为什么新的 PDF 文件不同,因此除了猜测之外,不可能为您提供任何有用的建议。


推荐阅读