Aspose.pdf 如何获取字符在嵌入TTF字体文件中的索引

我现在需要将PDF转换为一个专用的办公文档格式,但是这个文档需要提供字符在字体文件中的索引,系统内的字体集,我可以用API函数 GetGlyphIndices 来获取,但是PDF内嵌的字体,就不行了,请问ASPOSE.PDF是否提供这个功能,如有,请问如何实现
附上字体文件,及文字对应的索引
font_1_1.zip (208 Bytes)
在这个字体文件中,现在可以确定
“重庆” 这两个字的索引,分别对应 93 44
不知道我有没有描述的足够清楚
这个并不需要原文档,只是单纯取的 嵌入式字体文件 中字符的索引

也就是说,如何查询嵌入字体的CMAP表,取得相应字符在其中的索引
我找到了

但不知如何使用
JAVA版本有这个

.NET的在哪里

@icejd

我们正在最后检查相关信息,并会尽快与您联系。

好的,请问现在有结果了吗,

@icejd

我们担心尚未对所需的功能进行详细的调查,因此,我们已在问题跟踪系统中将调查票据记录为PDFNET-49638。 我们将进一步分析您的要求是否可以实现,并在问题单得到解决后立即通知您。 请给我们一些时间。

我们对不便表示抱歉。

我似乎发现aspose.fonts 有点作用,我用下面的代码可以取得字体文件的GlyphIds 数量是正确的,
FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition(“ttf”, new FileSystemStreamSource(fileName)));

                                TtfFont ttfFont = Aspose.Font.Font.Open(fd) as TtfFont;
                                var ids = ttfFont.GetAllGlyphIds();

那么请问我如何取得指定字符在字体文件中的Index,比如上面附件中的“重庆” 这两个字的索引,分别对应 93 44
我尝试用 ttfFont.GetGlyphsForText(“重”);
得到 的结果是null

@icejd

我们试图在我们的环境中测试该场景,但是在第二行代码中遇到了一个例外:

#= ze6HUch9SkveXDe6x8TXZooj6o1ND6MTK5w ==:'未找到所需的表'head'。

为了更正,已在我们的问题跟踪系统中记录了一个名为“FONTNET-217”的问题。我们将进一步调查其详细信息,并向您发布其更正状态。请耐心等待,为我们节省一些时间。

我们对造成的不便很抱歉。

@icejd

您能否再次与我们共享字体文件?我们已经检查了字体文件,它是无效的。它的主体中仅包含零。

@asad.ali font_1_1.zip (17.4 KB)
抱歉,上一次传的字体文件确实有问题,请用这个试试

@icejd

感谢您提供正确的字体文件。

我们已经根据已记录的故障单更新了信息,并在故障单解决后立即通知您。请给我们一些时间。

@icejd

我们已经调查了较早记录的工单。输入字体没有按指定的字符代码提取字形所需的信息。
从字体中获取所需字形需要两部分信息 - 字形列表以及这些字形和字符代码之间的映射。
大多数现有字体都提供了所需信息的两部分。

但输入字体是这些字体的一个例外。它只提供一个字形列表,而不提供字形和字符代码之间的映射。
映射至少需要 2 个表中的一个 - ‘cmap’ 或 ‘post’,但输入字体没有任何一个。
字形只能通过直接字形标识符从该字体中提取,而不能通过字符代码。

通常字体,比如 input one,是由特殊的软件创建的,比如 Adob​​e Acrobat,它已经知道
每个需要的字形,这个软件从字体中删除字符代码映射以减小字体大小。

但是对于字形请求返回 null,对于这种情况和许多其他情况是不正确的行为。
因此,针对方法 Aspose.Font.Font.GetGlyphsForText() 更正了 Aspose.Font 的代码。

新规则是:

  • 当字体在字形和代码之间没有映射时 - 将抛出类型为 EncodingException 的异常。

  • 当字体提供字形和代码之间的映射但未找到所需字形时 - 特殊 .notdef 字形的索引将
    被退回。字体规范:“.notdef 字形对于提供在字体中未找到字形的用户反馈非常重要”。