python - PDF miner - 提取字体大小?

标签 python pdf fonts

<分区>

我很好奇是否可以使用 pdfminer 来提取字体大小。我认为这有助于分离不同的部分。我知道下面有讨论,但我很好奇是否可以使用 pdfminer

Extract text from PDF in respect to formatting (font size, type etc)

pdfminer 文档说这是可能的 http://www.unixuser.org/~euske/python/pdfminer/

但是当我在命令行中输入 he following 时,我只会得到一个纯文本文档。我没有看到任何字体信息。

pdf2txt.py -o output.html samples/CentolaCV.pdf

例如...

2008-13  Assistant Professor, Sloan School of Management, M.I.T.  

2006-08   Robert Wood Johnson Scholar in Health Policy, Harvard University 

2001-02   Visiting Scholar, The Brookings Institution

最佳答案

这个任务让我困惑了很久。除了提取字体信息之外,我还想在 python 脚本中运行这段代码。

但是,今天我能够解决它。下面我写了一个脚本,它从命令行调用 pdf2txt.py 脚本,然后从解析的 PDF 和新创建的 html 文件中提取字体信息。

import os

pathToScript = r'path\to\script\pdf2txt.py'
pathPDFinput = os.path.join(path\to\file, 'test.pdf')
pathHTMLoutput = os.path.join(path\to\file, 'test.html')

# call the pdf2txt.py from the command line
os.system('python {} -o {} -S {} -t html'.format(pathToScript, pathHTMLoutput, pathPDFinput))
  

提取每个 html 标签的字体大小:

# credits to akash karothiya: 
# https://stackoverflow.com/questions/39012739/need-to-extract-all-the-font-sizes-and-the-text-using-beautifulsoup/39015419#39015419

import re
import pandas as pd
from bs4 import BeautifulSoup

# open the html file
html = open(pathHTMLoutput, 'r')
soup = BeautifulSoup(html)

font_spans = [data for data in soup.select('span') if 'font-size' in str(data)]
output = []
for span in font_spans:
    fonts_size = re.search(r'(?is)(font-size:)(.*?)(px)', str(span.get('style'))).group(2)
    fonts_family = re.search(r'(?is)(font-family:)(.*?)(;)', str(span.get('style'))).group(2)

    # split fonts_family into fonts-type and fonts-style
    try:
        fonts_type = fonts_family.strip().split(',')[0]
        fonts_style = fonts_family.strip().split(',')[1]
    except IndexError:
        fonts_type = fonts_family.strip()
        fonts_style = None

    output.append(
        (str(i.text).strip(), fonts_size.strip(), fonts_type, fonts_style)
    )

# create dataframe
df = pd.DataFrame(output, columns = ['text', 'fonts-size', 'fonts-type', 'fonts-style'])

关于python - PDF miner - 提取字体大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22329508/

相关文章:

Python 使用设置初始化一个 memoizing 装饰器

python - 是否值得在小函数中关闭文件?

xslt - 具有多个页面序列的 xsl-fo(和 apache fop)中的页码

html - 是字体系列 : arial something that will work on every computer and mobile device?

python - 在 Python 中,如何使窗口在行而不是列上滚动?

javascript - 将网页信息转换成pdf信息

pdf - 将 SSRS 报告打印到文件 (.PDF)

iOS 自动使用自定义阿拉伯语/西里尔语字体

emacs - 如何配置 Emacs 使用可变字体来显示 LaTeX 公式的预览?

python - 数据框中非数字和零值单元格的索引