Python部分阅读pdf

时间:2015-04-09 20:13:48

标签: python pdf pypdf pdfminer

我正在尝试阅读一个pdf文件,其中每个页面被分成3x3格式的信息块

A | B | C
D | E | F
G | H | I

每个条目分为多行。一个条目的简化示例是this card。但是在其他8个插槽中会有类似的卡片。 我希望能够阅读A,然后是B,然后是C ......;但是,如果我读到A,B和C的第一行,然后是A,B和C的第二行等,我就能活下来。我看过pdfminer和pypdf,但我还没有看到什么适合我正在寻找的东西。答案here运作得相当好,但是顺序为 列通常会被扭曲。

2 个答案:

答案 0 :(得分:1)

在第二个答案here替换

self.rows = sorted(self.rows, key = lambda x: (x[0], -x[2]))

通过

self.rows = sorted(self.rows, key = lambda x: (x[0], -x[2], x[1]))

非常重要:请参阅此答案的最后一段。

答案 1 :(得分:0)

我无法提出完美的解决方案,但以下内容最适合我的需求。

import PyPDF2
from StringIO import StringIO
def getPDFContent(path, pages=[]):
    content = ""
    p = file(path, "rb")
    pdf = PyPDF2.PdfFileReader(p)
    if pages:
        for i in pages:
            content += pdf.getPage(i).extractText() + "\n"
    else:
        numPages = pdf.getNumPages()
        for i in range(numPages):
            content += pdf.getPage(i).extractText() + "\n"
    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content