3

pdfminer(バージョン20140328)でpdfを抽出したいと思います。

これは、pdf を抽出するコードです。

import sys
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
from cStringIO import StringIO
import urllib2

def pdf_to_string(data):
    fp = StringIO(data)
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    # Create a PDF interpreter object.
    interpreter = PDFPageInterpreter(rsrcmgr, device)

    # Process each page contained in the document.
    for page in PDFPage.get_pages(fp):
        interpreter.process_page(page)
        data =  retstr.getvalue()

    return data

pdf_url="http://www.consilium.europa.eu/uedocs/cms_data/docs/pressdata/en/ecofin/140836.pdf"
file_object = urllib2.urlopen(urllib2.Request(pdf_url)).read()
string=pdf_to_string(file_object)

これは、pdf のスクリーンショットです。 ここに画像の説明を入力

問題は、pdfminerそれを水平方向 (人から位置) ではなく、列 (すべての人からそれぞれの位置) で読み取ることです。

Belgium: 
Mr Koen GEENS 

Bulgaria: 
Mr Petar CHOBANOV 

Czech Republic: 
Mr Radek URBAN 


Minister for Finance, with responsibility for the Civil 
Service 

Minister for Finance 

Deputy Minister for Finance 

pdfminerテキストを横に読むにはどうすればよいですか?

4

1 に答える 1

0

私は次の機能を備えた解決策を見つけましたpdftotext

import tempfile, subprocess

def pdf_to_string(file_object):
    pdfData = file_object.read()
    tf = tempfile.NamedTemporaryFile()
    tf.write(pdfData)
    tf.seek(0)
    outputTf = tempfile.NamedTemporaryFile()

    if (len(pdfData) > 0) :
        out, err = subprocess.Popen(["pdftotext", "-layout", tf.name, outputTf.name ]).communicate()
        return outputTf.read()
    else :
        return None

pdf_file="files/2014_1.pdf"
file_object = file(pdf_file, 'rb')
print pdf_to_string(file_object)

これにより、正しい出力、人名、次に位置が生成されます:)。

解決しました!

于 2014-10-31T11:19:07.687 に答える