如何使用tabula-py读取带密码保护的PDF表格?
用tabula-py提取带密码PDF中的表格(可行方案)
当然可以,tabula-py支持处理已知密码的加密PDF,下面是两种实用的实现方法:
方法1:直接传入密码读取
tabula-py的核心函数read_pdf自带password参数,只需传入PDF的密码,就能直接解密并提取表格,无需额外处理文件。
示例代码:
import tabula # 读取加密PDF的所有表格 tables = tabula.read_pdf( "加密表格.pdf", password="你的PDF密码", pages="all", # 指定提取页码,比如"1,3"或"2-5" multiple_tables=True # 一页多表时返回列表 ) # 遍历处理表格 for i, table in enumerate(tables): print(f"第{i+1}个表格内容:") print(table) # 保存为CSV文件 table.to_csv(f"提取表格_{i+1}.csv", index=False)
方法2:先解密再提取
如果遇到少数tabula直接传密码无法处理的特殊加密PDF,可以先用PyPDF2或pdfplumber解密后生成临时文件,再用tabula读取。
示例代码(基于PyPDF2):
from PyPDF2 import PdfReader, PdfWriter import tabula import os # 解密PDF函数 def decrypt_pdf(input_file, output_file, pwd): reader = PdfReader(input_file) if reader.is_encrypted: reader.decrypt(pwd) writer = PdfWriter() for page in reader.pages: writer.add_page(page) with open(output_file, "wb") as f: writer.write(f) # 生成解密后的临时文件 decrypt_pdf("加密表格.pdf", "临时解密版.pdf", "你的PDF密码") # 读取解密后的PDF表格 tables = tabula.read_pdf("临时解密版.pdf", pages="all", multiple_tables=True) # 清理临时文件 os.remove("临时解密版.pdf")
额外提示
- 确保tabula-py是最新版本,旧版本可能存在加密PDF兼容问题,执行
pip install --upgrade tabula-py更新即可。 - 若PDF中的表格是扫描生成的图片格式,tabula-py无法直接提取,需要先通过OCR工具(如pytesseract)识别为可编辑文本后再处理。
内容的提问来源于stack exchange,提问作者MegaJas
相关产品推荐
相关产品推荐

