我编写了一个脚本,用于解析PDF文件中的信息并将其输出到HTML。它是用Python编写的,使用pdfminer
。
在某些文本段上,字体样式可以具有语义意义。例如:粗体,斜体和颜色应触发不同的行为。 Pdfminer
为脚本提供字体名称,但不提供颜色,并且还有许多其他问题;所以我正在使用Apple的PDFKit开发该程序的Swift版本来提取相同的功能。
我现在发现我有相反的问题。虽然PDFKit可以轻松检索颜色,但检索原始字体名称似乎并不明显。 PDFSelection
个对象具有attributedString
属性,但对于未安装在我的计算机上的字体,NSFont
对象是Helvetica。当然,有问题的字体相当昂贵,而为此目的获取副本的形式很差。
没有下降到CGPDFContentStream
(这是方式对我想要的东西来说太大了),有没有办法获得原始字体名称?我事先知道字体会是什么,我可以利用它吗?
答案 0 :(得分:0)
PDFKit似乎使用标准字体查找系统然后回退到某些默认值,因此可以通过欺骗字体来解决这个问题,以确保PDFKit不需要回退。检查文档,我能够确定它使用以下字体(用他们的PostScript名称引用):
我使用免费的字体创建实用程序来创建具有这些PostScript名称的虚拟字体,然后我将它们添加到我的应用程序包中。然后我使用CTFontManagerRegisterFontsForURLs
加载这些字体(在.process
范围内),现在PDFKit将这些字体用于需要它们的属性字符串。
当然,字体是伪造的,这对渲染来说毫无用处。但是,它可以完美地用于识别使用这些字体的文本。