如何从 Ghostscript 生成的 PDF 中获取原始字体名称?

How can get original font names from PDF generated by Ghostscript?

我有一个由 Ghostscript 8.15 生成的 pdf。我需要从我的软件中处理这个 pdf,它从 pdf 文件中提取字体名称,然后执行一些操作。但是当我从这个 pdf 文件中提取字体名称时,这些名称并不像应该的那样。例如:原始字体名称是'NOORIN05',但pdf文件包含'TTE25A5F90t00'。如何将这些字体名称解码为原始名称。所有字体均为 TTF.

注意: 为什么我需要提取字体。 实际上有一个名为InPage的软件在印度和巴基斯坦最著名的用乌尔都语编写文档,因为在文字处理器支持unicode之前,这是在计算机上输入乌尔都语的唯一解决方案。由于乌尔都语的复杂性,本软件使用了 89 个名为 NOORIN01 到 NOORIN89 的字体文件。使用太多字体文件的原因是包含超过 19,000 个乌尔都语连字。因为每个文件只能包含 255 个连字,所以这就是他们在 unicode 之前使用此技术的原因。现在从该软件生成的 pdf 文件中复制并粘贴文本,导致 MS Word 中出现垃圾。我上面说的89个字体文件的原因。所以没有办法从这种旧的 pdf 文件中提取文本。 (现在这个软件支持 unicode 但我说的是旧文件)。所以我用 C# 开发了一个软件来从这些旧的 pdf 文件中提取文本。我正在使用的算法创建了一个数据库文件,其中包含 89 个字体文件的所有名称以及所有 aschii 代码,在下一栏中我在 unicode 中键入了 Urdu unicode ligature。我用字体逐个字符地处理 pdf 文件,匹配我的数据库文件中的字体名称并从数据库中获取 unicode 连字,然后显示在文本框中。所以通过这种方式我成功地获得了unicode文本。我的软件在许多 pdf 文件中运行良好。但是几天前,我收到一个人的投诉,说你们的软件无法从这个 pdf 中提取文本。当我测试时,我发现 pdf 文件不包含原始字体名称,这就是为什么我的软件无法进行进一步处理的原因。当我检查这个 pdf 文件的属性时,它显示了 PDF 制作者 GPL Ghostscript 8.15。于是上网查了字体相关的文档,还是没找到破解字体原名的线索。

您应该做的第一件事是尝试更新版本的 Ghostscript。 8.16已经14岁了.....当前版本是9.21.

如果 doe snot 保留原始名称(可能包括通常的子集前缀),那么我们将需要查看一个显示问题的示例输入文件。

如果您要解释为什么您需要提取字体名称,这可能也会有所帮助,可能您正在尝试一些根本不可能的事情。

[编辑}

好的,现在我明白了这个问题,恐怕你的问题的答案是“你无法获得原始字体名称”。

PDF 文件是根据(Adobe 创建的)Windows PostScript 打印机驱动程序的输出创建的。当将 TrueType 字体作为 42 型字体嵌入到 PostScript 流中时,它会为它们提供一个伪随机名称,该名称由 'TT' 后跟一些看起来像十六进制但实际上不是的其他字符组成。

旧版本的 Ghostscript pdfwrite 设备(8.15 非常 旧)只是逐字使用该名称,这就是您在 PDF 文件中使用的字体名称已提供。

较新的版本能够进一步挖掘字体并选取 PostScript 中存在的原始字体名称。不幸的是,旧版本没有保留这一点。一旦您丢弃了信息,就无法再取回它。

因此,如果您只有这个 PDF 文件,那么根本不可能取回字体名称。如果向您提供 PDF 文件的人可以使用较新版本的 Ghostscript 重新制作它,那么它就可以工作。但我认为他们没有用于创建 14 年前文件的 PostScript 程序。