【发布时间】:2019-01-18 18:03:56
【问题描述】:
我正在使用 iTextSharp 进行 PDF 处理,我需要从现有 PDF 中提取所有以某种字体编写的文本。
A way to do that 是inherit from a RenderFilter 并且只允许具有特定PostscriptFontName 的文本。问题是当我这样做时,我在 PDF 中看到以下字体名称:
这与我正在寻找的实际字体名称完全不同。
我试过enumerating the font resources,结果一样。
-
我试过opening the PDF in the full Adobe Acrobat。它还显示了损坏的字体名称:
我已尝试使用iText RUPS 分析文件。结果一样。
也就是说,我无法在文档结构中的任何位置看到实际的字体名称。
然而,当我在文档画布上选择各种文本框(例如 Arial、Courier New、Roboto)时,Adobe Acrobat DC 确实在“格式”窗格中显示了正确的字体名称,因此信息必须存储在某处。
使用 iTextSharp 解析 PDF 时如何获取这些真实字体名称?
【问题讨论】:
-
可以分享一下pdf吗?我假设名称仅存在于实际的嵌入式字体程序中,而不存在于它的 pdf 元数据中。 Itext(就像 adobe acrobat 一样,除非您做一些强制它查看实际字体程序的操作)只查看字体元数据,因此只查看匿名名称。顺便说一句,这严格来说是pdf中的错误。但这是一个通常没人关心的错误。
-
@mkl 见drive.google.com/…
-
确实,嵌入式字体程序(TTF 等)确实包含您要查找的字体名称。 iText 不会查看它们的名称,严格来说,iText 不需要这样做,因为 PDF 规范要求您访问的 BaseName 必须从字体程序中获取,所以严格来说,您的 PDF 已损坏(即使在几乎没有任何软件会抱怨)。尽管如此,您还是可以查看代码中的字体程序。