【问题标题】:How can I get the original font name of some text using PDFKit?如何使用 PDFKit 获取某些文本的原始字体名称?
【发布时间】:2018-07-11 09:08:20
【问题描述】:

我编写了一个脚本,它解析 PDF 文件中的信息并将其输出到 HTML。它是用 Python 编写的,使用 pdfminer

在某些文本段上,字体样式可能具有语义意义。例如:粗体、斜体和颜色应该触发不同的行为。 Pdfminer 为脚本提供字体名称,但不提供颜色,而且它还有许多其他问题;所以我正在开发该程序的 Swift 版本,使用 Apple 的 PDFKit 来提取相同的功能。

我现在发现我遇到了相反的问题。虽然 PDFKit 使检索颜色变得容易,但检索原始字体名称似乎并不明显。 PDFSelection 对象具有 attributedString 属性,但对于我的计算机上未安装的字体,NSFont 对象是 Helvetica。当然,有问题的字体相当昂贵,仅仅为了这个目的而获得一个副本将是一种糟糕的形式。

没有下降到CGPDFContentStream(对于我想要的东西来说,方式太大了),有没有办法获得原始字体名称?我提前知道字体会是什么,我可以利用它来发挥我的优势吗?

【问题讨论】:

    标签: cocoa pdf fonts


    【解决方案1】:

    PDFKit 似乎使用标准字体查找系统,然后回退到一些默认值,因此可以通过欺骗字体来解决这个问题,以确保 PDFKit 不需要回退。检查文档后,我发现它使用了以下字体(引用了它们的 PostScript 名称):

    • “NeoSansIntel”
    • “NeoSansIntelMedium”
    • “NeoSansIntel,斜体”

    我使用免费的字体创建实用程序来创建具有这些 PostScript 名称的虚拟字体,并将它们添加到我的应用程序包中。然后我使用CTFontManagerRegisterFontsForURLs 加载这些字体(在.process 范围内),现在PDFKit 将这些字体用于需要它们的属性字符串。

    当然,字体是伪造的,这对渲染毫无用处。但是,它非常适合识别使用这些字体的文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多