web-dev-qa-db-ja.com

PDFminer:フォント情報を含むテキストを抽出します

この質問 が見つかりましたが、コマンドラインを使用しているため、サブプロセスを使用してコマンドラインでPythonスクリプトを呼び出し、HTMLファイルを解析してフォントを取得したくありません。情報。

PDFminerをライブラリとして使用したいのですが、 この質問 ですが、フォント名やフォントサイズなどの情報がなく、プレーンテキストを抽出するだけです。

9
aristotll
#!/usr/bin/env python
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
import pdfminer


def createPDFDoc(fpath):
    fp = open(fpath, 'rb')
    parser = PDFParser(fp)
    document = PDFDocument(parser, password='')
    # Check if the document allows text extraction. If not, abort.
    if not document.is_extractable:
        raise "Not extractable"
    else:
        return document


def createDeviceInterpreter():
    rsrcmgr = PDFResourceManager()
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    return device, interpreter


def parse_obj(objs):
    for obj in objs:
        if isinstance(obj, pdfminer.layout.LTTextBox):
            for o in obj._objs:
                if isinstance(o,pdfminer.layout.LTTextLine):
                    text=o.get_text()
                    if text.strip():
                        for c in  o._objs:
                            if isinstance(c, pdfminer.layout.LTChar):
                                print "fontname %s"%c.fontname
        # if it's a container, recurse
        Elif isinstance(obj, pdfminer.layout.LTFigure):
            parse_obj(obj._objs)
        else:
            pass


document=createPDFDoc("/tmp/simple.pdf")
device,interpreter=createDeviceInterpreter()
pages=PDFPage.create_pages(document)
interpreter.process_page(pages.next())
layout = device.get_result()


parse_obj(layout._objs)
5

このアプローチはPDFMinerを使用しませんが、トリックを行います。

まず、PDFドキュメントをdocxに変換します。 python-docx を使用すると、フォント情報を取得できます。太字のテキストをすべて取得する例を次に示します。

from docx import *

document = Document('/path/to/file.docx')

for para in document.paragraphs:
    for run in para.runs:
        if run.bold:
            print run.text

本当にPDFMinerを使用したい場合は、 this を試すことができます。 '-t'を渡すと、PDFがすべてのフォント情報を含むHTMLに変換されます。

2
Samkit Jain

PDFlib を見てください。必要に応じてフォント情報を抽出でき、スクリプトにインポートして操作できるPythonライブラリがあります。

1
gplayer

一部の情報は、LTCharクラスの下位レベルにあります。フォントサイズ、斜体、太字などを1つの文字に適用できるため、論理的に見えます。

詳細はこちら: https://github.com/euske/pdfminer/blob/master/pdfminer/layout.py#L222

しかし、私はまだこのクラスにないフォントの色について混乱しています

0
Heraknos