如何使用python处理内存中的PDF?

时间:2019-02-22 05:28:43

标签: python pdf in-memory pypdf2

背景

我有一个多页的PDF文件(LARGE_PDF)。每页包含一个表,没有其他内容。每个表看起来都不同。我想提取表内容并将其放入pandas数据框。我正在为此使用tabula-py,它可以通过以下方法按需工作:

方法:

首先,我将PDF文件拆分为多个单页PDF文件并将其保存到光盘中。

single_page_files = split_and_save(LARGE_PDF) # Split to single files, one page each

第二,将每个文件馈送到tabula-py。

from tabula import read_pdf as tabular_read 

for item in single_page_files:                
    print type(item)
    df = tabular_read(PDF_page, pandas_options={'header':None})
    if df:
         print 'approach works'

输出:

>>> <type 'str'>                              # filepath string
>>> approach works

挑战:

我现在要在内存中执行此操作,这样就不会将任何中间的单页pdf文件保存到磁盘上。为此,我创建了一个单页PyPDF2.pdf.PageObject对象列表,并将其提供给tabula-py。

from PyPDF2 import PdfFileReader, PdfFileWriter

single_page_pypdfobjects = split_but_dont_save(LARGE_PDF)
for item in single_page_pypdfobjects:                
    print type(item)
    df = tabular_read(PDF_page, pandas_options={'header':None})
    if df:
         print 'approach works'

输出:

>>> class 'PyPDF2.pdf.PageObject'>             # PyPDF2 single page object
>>> TypeError: unhashable type

如何使用python处理内存中的PDF?

1 个答案:

答案 0 :(得分:1)

您不需要拆分PDF。 Tabla-py有一个选项pages告诉您要从中提取哪些页面。