如何使用python代码查找PDF文件每个段落的字体大小?

问题描述 投票:0回答:2

现在我正在做一个项目,我必须找到该 PDF 文件中每个段落的字体大小。我尝试过各种Python库,如fitz、PyPDF2、pdfrw、pdfminer、pdfreader。所有库都会获取文本数据,但我不知道如何获取段落的字体大小。 预先感谢..感谢您的帮助。

我已经尝试过,但无法获取字体大小。

import fitz

filepath = '/home/user/Downloads/abc.pdf'
text = ''
with fitz.open(filepath ) as doc:
    for page in doc:
        text+= page.getText()
print(text)
python pdf fonts font-size
2个回答
7
投票

我从 pdfminer 得到了解决方案。 下面给出了相同的 python 代码。

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar,LTLine,LAParams
import os
path=r'/path/to/pdf'

Extract_Data=[]

for page_layout in extract_pages(path):
    for element in page_layout:
        if isinstance(element, LTTextContainer):
            for text_line in element:
                for character in text_line:
                    if isinstance(character, LTChar):
                        Font_size=character.size
            Extract_Data.append([Font_size,(element.get_text())])

2
投票

更好的方法是使用 pymupdf/fitz 本身。与

pdfminer
相比,该库在抓取字体信息方面明显更快、更清晰。下面显示了示例代码片段。

import fitz

def scrape(keyword, filePath):
    results = [] # list of tuples that store the information as (text, font size, font name) 
    pdf = fitz.open(filePath) # filePath is a string that contains the path to the pdf
    for page in pdf:
        dict = page.get_text("dict")
        blocks = dict["blocks"]
        for block in blocks:
            if "lines" in block.keys():
                spans = block['lines']
                for span in spans:
                    data = span['spans']
                    for lines in data:
                        if keyword in lines['text'].lower(): # only store font information of a specific keyword
                            results.append((lines['text'], lines['size'], lines['font']))
                            # lines['text'] -> string, lines['size'] -> font size, lines['font'] -> font name
    pdf.close()
    return results

如果你想找到每一行的字体信息,你可以省略检查特定关键字的if条件。

您可以通过了解我们使用 get_text("dict") 获得的

字典输出结构
来提取任何所需格式的文本信息,如文档中所述。

© www.soinside.com 2019 - 2024. All rights reserved.