使用Ghostscript从PDF中提取文本

7

我正在使用Ghostscript 9.20从一个仅包含两行文本的PDF文档中提取文本:

Hello world…
A beautiful day!

应用的代码是:
gswin32c -sDEVICE=txtwrite -o output.txt input.pdf

然而,输出结果是:
  䠀攀氀氀漀 眀漀爀氀搀☠ 
  䄀 戀攀愀甀琀椀昀甀氀 搀愀礀℀ 

发生了什么事情,我该怎么解决?

PDF 中字体的编码不一定与普通 ASCII 或 UTF 编码有任何关系。 - Stefan Hegny
请检查您的“中文”文本的十六进制视图。它显示为“Hello world…਀  A beautiful day!”(其中是0x0A00,这可能是由于从屏幕上复制输出而出现的问题)。 - Jongware
那么,我该怎么修复我的代码? - KitKat
1个回答

3
在9.20版本中存在一个错误,影响到某些文本提取。并非全部文本,而是取决于输入文件,由于您没有提供该文件,因此无法确定您的特定输入文件是否受到影响。
要解决这个问题,您可以:
  1. 从我们的Git存储库克隆Ghostscript,构建和测试最新代码。
  2. 等待下一个发布(三月份)并测试它。
  3. 提交错误报告,有人会查看它。虽然这不会真正帮助您。如果已经修复了它,那么您必须选择1或2。如果还没有修复,则需要等待修复,然后执行1或2,但至少您已经帮助改进了产品。

这个 bug 是否与大端/小端 Unicode 16 位文本有关? - Jongware
1
这确实是问题的结果。因为Adobe(一段时间以前)改变了ToUnicode CMap的定义,我们不得不重新编码大量的东西,这些东西产生了一些意想不到的副作用。ToUnicode生成(和文本提取代码)经常使用启发式方法,因为我们经常在没有具体数据的情况下工作。在这种情况下,重写后一个特定的回退做出了无效的假设,这意味着UTF16-BE实际上在内部处理时使用了错误的字节序。 - KenS
1
是的,没错。我刚刚尝试了9.18版本,它运行得很好。 - KitKat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接