PDF:字符代码 -> 字形名称 -> NSString



在回答我之前的问题时,尝试使用CGPDF*函数从PDF文件中提取文本,具有:

CGPDFStringRef pdfString

我发现它可以转换成一个字符代码数组,如下所示:

const unsigned char *characterCodes = CGPDFStringGetBytePtr(pdfString);

现在,我试图提取的文本是用14种类型1的基本字体中的一种编写的,它没有在PDF中编码。为此,我解析了该字体的相关AFM文件,为我提供了从字符代码到字形名称的映射,其尺寸如下:

C 61 ; WX 600 ; N equal ; B 80 138 520 376 ;
C 63 ; WX 600 ; N question ; B 129 -15 492 572 ;
C 64 ; WX 600 ; N at ; B 77 -15 533 622 ;
C 65 ; WX 600 ; N A ; B 3 0 597 562 ;
C 66 ; WX 600 ; N B ; B 43 0 559 562 ;

我的问题是,知道字符代码后,说:"61">我如何从它的字形名称:equal">NSString@"=">。特别是当该字符代码被重新映射到其他字形名称时,例如:PDF的字体编码选项"question">

以前的问题:iOS PDF解析类型1字体指标和iOS PDF到纯文本解析器

我还没有测试过,但在我看来,你需要使用Adobe Glyph命名约定:

Adobe Glyph命名约定的目的是支持从字形序列计算Unicode字符串。这是通过指定从字形名称到字符的映射来实现的字符串。

该页面上链接的glyphlist.txt似乎与您的问题有关
样本片段:


ε;03B5
epsilontonos;03AD
相等;003D
等于单空间;FF1D
等于small;FE66
等于上级;207C
。。。

然后,您所需要做的就是将这些unicode值放入NSString实例中。

编辑:
确认上述信息后,我在Adobe的PDF参考文档上找到了以下解释,第5.9节-文本内容提取

如果字体是使用预定义编码之一的简单字体MacRomanEncoding、MacExpertEncoding或WinAnsiEncoding,或具有Differences数组仅包含字符名的编码取自Adobe标准拉丁字符集和符号字体中的字符(见附录D):

  1. 根据上的表D.1将字符代码映射到字符名称第996页和字体的Differences数组
  2. 在Adobe Glyph列表中查找字符名称(请参阅Bibliography)以获得相应的Unicode值

最新更新