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

时间:2017-06-10 15:35:20

标签: pdf ghostscript

我有一个由Ghostscript 8.15制作的pdf。我需要从我的软件处理这个pdf,它从pdf文件中提取字体名称,然后执行一些操作。但是当我从这个pdf文件中提取字体名称时,这些名称与应该的名称不同。例如:原始字体名称为“NOORIN05”,但pdf文件包含“TTE25A5F90t00”。如何将这些字体名称解码为原始名称。所有字体都是TTF。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

<强> [EDIT}

好的,现在我明白了这个问题,我担心你问题的答案是“你不能得到原来的字体名称”。

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

Ghostscript pdfwrite设备的旧版本(以及8.15 非常旧版本)只是逐字地使用该名称,以及您提供的PDF文件中使用的字体名称的内容

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

因此,如果你唯一拥有的是这个PDF文件,则根本无法获得字体名称。如果为您提供PDF文件的人可以使用更新版本的Ghostscript重新制作它,那么它将起作用。但我认为他们没有使用PostScript程序创建一个14岁的文件。