我已经编写了从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
对象,请查看此处的文档(位于单独的存储库中)。