如何获取pdf文件中的字体名称



我已经编写了从pdf文件中提取一些信息的脚本。

我的代码:

for page in doc:
rect = fitz.Rect(22, 52, 562,802)  # crop page margins to ignore header, footer, left side
blocks = page.get_text("blocks",rect, flags=fitz.TEXTFLAGS_TEXT)
for i in blocks:
if (i[-3][0].isdigit()):#check if title
if (i[-3].partition(" ")[0].count('.')==0):#check if subtitle
nr=i[-3].partition(" ")[0]
txt = (i[-3]).partition(" ")[2]
else:
sub_nr='="' +i[-3].partition(" ")[0]+ '"'
sub_txt=i[-3].partition(" ")[2]
elif (i[-3].startswith("[V2G")):
id=i[-3].partition("n")[0].replace("[", " ").replace("]"," ")
text=i[-3].partition("n")[2].strip()
data.append(req(filename, nr, txt, sub_nr, sub_txt, id, text))

我想添加另一个条件到txt变量取决于字体名称。

if font1 == 'Cambria-Bold':
txt=.....

如何获取字体名称?

我在pymupdf库page.get_fonts()中找到了这种方法但它显示页面中的孔字体,而不是特定文本。我如何使用这种方法来达到我的目的

python中是否有其他库可以获取字体信息?

感谢您帮助

免责声明:我是borb的作者,该库用于此答案

borb中,渲染Page是一个可以附加EventListener实例的过程。每当处理渲染指令(如"渲染文本"或"渲染图像")时,都会通知EventListener

borb已经为您提供了一些有用的EventListener实现。

特别地,我将研究font_name_filter,如果它命中特定的Font,它会将渲染事件传递给它的子级。

你可以在这里找到它的代码。

def _event_occurred(self, event: "Event") -> None:
# filter ChunkOfTextRenderEvent
if isinstance(event, ChunkOfTextRenderEvent):
font_name: typing.Optional[str] = event.get_font().get_font_name()
if font_name == self._font_name:
for l in self._listeners:
l._event_occurred(event)
return
# default
for l in self._listeners:
l._event_occurred(event)

您当然可以构建自己的EventListener并获得:

  • 正在呈现的文本
  • 呈现文本的坐标
  • 呈现文本的字体
  • 等等

要了解如何使用EventListener对象,请查看此处的文档(位于单独的存储库中)。