【问题标题】:How to detect Font Family in PDF?如何检测 PDF 中的字体系列?
【发布时间】:2016-06-24 09:50:21
【问题描述】:

我有一个包含许多字体的 pdf,检查它是否包含属于 Arial 字体系列的字体的最佳方法是什么? 这可以用任何语言实现吗?
我找不到任何可以做到这一点的库或语言。

因此,我尝试使用 ImageMagick 将 pdf 转换为图像并分割图像中存在的所有字母(pdf)。然后我尝试将所有分割的字母与 arial 字体系列字母的分割图像进行比较,效果很好。

我使用 MS Word 创建了所有数据集。但是 arial 字体系列在不同的编辑器中看起来不同。通过“看起来不同”,我的意思是相同字母的分段图像在不同的编辑器中具有不同的像素值。而且 10pt 大小的字母也有不同编辑器中的不同维度。所以,这种方法不起作用。

关于如何做到这一点的任何建议?可能使用的是svg文件或ps文件

我还了解到,在 pdf 中,字母表是使用贝塞尔曲线呈现的,其中每条贝塞尔曲线都是使用一些控制点和节点绘制的。 这些控制点对于属于一个字体系列的所有字母是否相同?如果是,如何提取pdf中字母的控制点,因为这些可用于检测字体系列。

【问题讨论】:

  • 应该能够检查哪个代码。 C,Python,grep,字符串,...?请添加到问题和到目前为止您尝试过的内容。谢谢。
  • 问“我从哪里开始”的问题通常过于宽泛,are not a good fit for this site。人们有自己解决问题的方法,因此不可能有正确的答案。好好阅读Where to Start,然后写下你的帖子。
  • 抱歉帖子不清楚

标签: pdf fonts


【解决方案1】:

您的文档中可以有三种类型的文本:

  1. 文本不是真正的文本,而是光栅图像的一部分,
  2. 不使用真实字体的PDF语法绘制的矢量文本,
  3. 使用真实字体的矢量文本。

您的问题的答案取决于您遇到的文本类型:

  1. 如果文本不是真正的文本,而是光栅图像的一部分,则无法提取字体信息。您需要一个 OCR 工具将像素转换为字符,但您不会获得有关字体系列的任何信息。您可以尝试比较像素,但您已经尝试过,并且发现这并非易事(有人可能会认为您当前的解决方案是一种糟糕的解决方法/糟糕的设计)。
  2. 您使用贝塞尔曲线描述在页面上绘制的文本。虽然可以像这样绘制文本,但您不会发现很多这样绘制的 PDF。原因很明显:每次您需要特定字形时,比如 A,您都需要添加语法以在页面上绘制该字形,从而导致大量冗余的 PDF 语法。
  3. PDF 通常使用字体。字体使用字体字典存储在 PDF 文件中。构成页面的语法使用可由 PDF 制作者选择的名称来引用该字体,但该名称对应于页面资源中包含对字体字典的引用的条目。每种字体都有一个将字符映射到字形的编码。在我们使用字符的页面内容中,根据这些字符,字体中会选择字形。

您在询问字体系列。此信息存储在字体字典中。看看我对问题What are the ways of checking if piece of text in PDF documernt is bold using iTextSharp 的回答,你就会知道这样的字体字典是什么样子的。

您在字体字典中看到/BaseFont 条目了吗?它具有诸如JOJJAH+TT116t00 之类的值。在这种情况下,字体的名称是“TT116t00”,但“JOJJAH”是什么?这在我对问题What are the extra characters in the font name of my PDF?的回答中进行了解释@

并非所有字体都被嵌入。有时,字体的名称足以让查看者知道字形的样子。例如:有 14 种 Standard Type 1 字体,每个查看者都应该能够呈现。

Arial 不是这些字体之一,因此如果您想确保正确呈现 Arial,则需要嵌入该字体。字体字典将引用一个字体描述符,您可以在其中找到使用线性路径、贝塞尔曲线等绘制字形的语法。假设您需要字符 A,那么字体描述符将包含一些知道如何绘制该字符的语法。字体字典还将有一个映射,将字符 A 映射到字形 A。现在,当您在内容中需要该字形时,您只需使用字符 A,这将引用绘制字形 A 的语法。该语法仅在 PDF 中存储一次。

假设 PDF 嵌入了完整的 Arial 字体,那么 /BaseFont 的值将是 Arial。但是,如果我们嵌入完整的 Arial 字体,PDF 就会变得臃肿。 Arial 中的字符太多了;我们不需要它们。这就是为什么我们只会嵌入一个或多个子集。当您在 /BaseFont 条目中看到 6 个字符后跟 + 符号时,您发现了一个字体子集。

可以使用不同的库来获取字体字典的/BaseFont 条目。在 iText 官方网站上,我们有不同的问答来解释如何Inspect a PDF。还有一个例子是lists the fonts used in a PDF。也许这会有所帮助。

注意:如帮助部分所述,更具体地说,在页面 What topics can I ask about here? 上,您会发现规则 #4:要求我们推荐或查找书籍、工具的问题,软件库、教程或其他场外资源与 Stack Overflow 无关,因为它们往往会吸引固执己见的答案和垃圾邮件。

我已向您提供了有关在 PDF 中何处查找字体信息的一般信息,但您不得提出问题以推荐最佳工具来执行此操作。很抱歉。

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 2011-02-16
    • 2020-08-11
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多