如何在Python中从PDF提取表格?

时间:2019-05-07 07:37:47

标签: python pdf

我有成千上万个仅由表格组成的PDF文件,其结构如下:

pdf file

但是,尽管结构合理,但我不能在不丢失结构的情况下读取表。

我尝试了PyPDF2,但是数据完全混乱了。

import PyPDF2 

pdfFileObj = open(pdf_file.pdf, 'rb') 
pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
pageObj = pdfReader.getPage(0) 

print(pageObj.extractText())
print(pageObj.extractText().split('\n')[0]) 
print(pageObj.extractText().split('/')[0]) 

我也尝试过Tabula,但它只读取标题(而不读取表的内容)

from tabula import read_pdf

pdfFile1 = read_pdf(pdf_file.pdf, output_format = 'json') #Option 1: reads all the headers
pdfFile2 = read_pdf(pdf_file.pdf, multiple_tables = True) #Option 2: reads only the first header and few lines of content

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试一下:pip install tabula-py

 from tabula import read_pdf
 df = read_pdf("file_name.pdf")

答案 1 :(得分:0)

经过一番挣扎之后,我找到了一种方法。

对于文件的每一页,有必要在表格的read_pdf函数中定义表的区域和列的限制。

这是工作代码

import PyPDF2 
from tabula import read_pdf

# Get the number of pages in the file
pdfFileObj = open(pdf_file, 'rb') 
pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
n_pages = pdfReader.getNumPages()

# For each page the table can be read with the following code
table_pdf = read_pdf(pdf_file, guess=False, pages = 1, stream=True , encoding="utf-8", area = (96,24,558,750), columns = (24,127,220,274,298,325,343,364,459,545,591,748))