PDF矿工 - 提取字体大小?

时间:2014-03-11 14:59:46

标签: 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/

但是当我输入他的命令行后,我只得到一个纯文本文档。我没有看到任何字体信息。

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

... e.g

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

2 个答案:

答案 0 :(得分:3)

尝试使用-t标志指定文件输出类型:

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

那应该返回一个带有样式属性font-family和font-size的html文件。

编辑:实际上,输出结尾看起来可以指定没有-t标志的outfile类型。你能链接到你试图从中提取字体样式的pdf文件吗?

答案 1 :(得分:0)

这个任务困扰了我很长时间。除了提取字体信息,我还想在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
from bs4 import BeautifulSoup
import re
# open the html file
htmlData = open(pathHTMLoutput, 'r')
soup = BeautifulSoup(htmlData)

font_spans = [ data for data in soup.select('span') if 'font-size' in str(data) ]
output = []
for i in font_spans:
    tup = ()
    # extract fonts-size
    fonts_size = re.search(r'(?is)(font-size:)(.*?)(px)',str(i.get('style'))).group(2)
    # extract into font-family and font-style
    fonts_family = re.search(r'(?is)(font-family:)(.*?)(;)',str(i.get('style'))).group(2)
    # split 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
    tup = (str(i.text).strip(),fonts_size.strip(),fonts_type, fonts_style)
    output.append(tup)

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