我有一个包含许多字体的pdf,检查它是否包含属于Arial字体系列的字体的最佳方法是什么?
这有可能用任何语言吗?
我找不到任何可以做到这一点的图书馆或语言。
所以,我尝试使用ImageMagick将pdf转换为图像并对图像中存在的所有字母进行分割(pdf)。然后我尝试将所有分割的字母表与arial字体系列字母表的分段图像进行比较,这些图像工作正常。
我使用MS Word创建了所有数据集。但是arial字体系列在不同的编辑器中看起来不同。“看起来不同”,我的意思是相同字母的分段图像在不同的编辑器中具有不同的像素值。并且10pt大小的字母表也有不同编辑器中的不同维度。所以,这种方法不起作用。
有关如何执行此操作的任何建议?可能正在使用svg文件或ps文件
我还了解到,在pdf中,使用贝塞尔曲线渲染字母表,其中每个贝塞尔曲线使用一些控制点和节点绘制。 这些控制点是否属于一个字体系列的所有字母表相同?如果是,如何在pdf中提取字母表的控制点,因为这些可用于检测字体系列。
答案 0 :(得分:1)
您的文档中可以有三种类型的文字:
您的问题的答案取决于您遇到的文字类型:
您在询问字体系列。该信息存储在字体字典中。看看我对问题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种标准类型1字体。
Arial不是这些字体之一,因此如果您想确保正确呈现Arial,则需要嵌入该字体。字体字典将引用字体描述符,您可以在其中找到使用线性路径,Bézier曲线等绘制字形的语法。假设您需要字符 A ,那么字体描述符将包含一些字体描述符知道如何绘制该字符的语法。字体字典还将具有将字符A
映射到字形 A 的地图。现在,当您在内容中需要该字形时,您可以使用字符A
,这将引用绘制字形 A 的语法。该语法仅存储在PDF中一次。
假设PDF嵌入了完整的Arial字体,那么/BaseFont
的值将为Arial
。但是,如果我们嵌入完整的Arial字体,PDF将会膨胀。 Arial中的字符太多了;我们并不需要它们。这就是我们只嵌入一个或多个子集的原因。当您在+
条目中看到6个字符后跟/BaseFont
符号时,您发现了一个字体子集。
获取字体字典的/BaseFont
条目可以使用不同的库来完成。在官方的iText网站上,我们有不同的Q& As解释如何Inspect a PDF。还有一个lists the fonts used in a PDF的例子。也许这会有所帮助。
注意:,如帮助部分所述,更具体地说,在页面What topics can I ask about here?上,您会发现规则#4:要求我们推荐或查找图书的问题,工具,软件库,教程或其他场外资源都是Stack Overflow的主题,因为它们往往会吸引见解答案和垃圾邮件。
我已经向您提供了有关在PDF中查找字体信息的位置的一般信息,但是您不能提出问题来推荐最佳工具来执行此操作。对不起。