Pdf转存Excel求助~
请问能不能用Python编写:1、让用户指定一文件夹;
2、逐一识别该文件夹下所有PDf文件,然后逐个PDF、逐页、逐行识别每一个PDF下所有文字和图片,把所有识别出来的内容按原页码存入“转换后+原文件名”.excel中;
3、“转换后+原文件名”.excel亦存入用户之前所指定的文件夹中;
4、列出转换成功了哪些PDF,失败了哪些PDF。 当然可以!以下是一个使用Python编写的简单程序,可以实现您的需求。该程序会使用 `pdfplumber` 库提取PDF中的文本,并使用 `openpyxl` 库将文本按页码存入Excel文件。对于图片提取部分,由于PDF中图片的嵌入方式复杂,且Excel中嵌入图片需要额外处理位置和大小,这里我们主要处理文本提取,图片提取部分仅作基本演示(您可能需要根据实际需求调整)。
请注意:运行前请确保安装了必要的库。您可以使用以下命令安装:
pip install pdfplumber openpyxl Pillow
以下是完整的代码示例:
import os
import pdfplumber
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
from PIL import Image
import io
import tempfile
def pdf_to_excel(folder_path):
# 获取文件夹中所有PDF文件
pdf_files =
success_list = []
fail_list = []
for pdf_file in pdf_files:
pdf_path = os.path.join(folder_path, pdf_file)
try:
with pdfplumber.open(pdf_path) as pdf:
# 创建Excel工作簿
wb = Workbook()
# 移除默认工作表
wb.remove(wb.active)
# 逐页处理
for page_num, page in enumerate(pdf.pages, start=1):
# 为每个页面创建一个工作表
ws = wb.create_sheet(title=f"Page_{page_num}")
# 提取文本
text = page.extract_text()
if text:
# 将文本按行分割并写入Excel
lines = text.split('\n')
for row_num, line in enumerate(lines, start=1):
ws.cell(row=row_num, column=1, value=line)
# 提取图片(基本演示,可能不适用于所有PDF)
images = page.images
for img_num, img in enumerate(images, start=1):
try:
stream = img['stream']
image_data = stream.get_data()
img_pil = Image.open(io.BytesIO(image_data))
# 使用临时文件保存图片
with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as temp_file:
img_pil.save(temp_file.name)
temp_path = temp_file.name
# 将图片添加到Excel(简单放置在文本下方)
xl_img = XLImage(temp_path)
max_row = ws.max_row if ws.max_row else 1
img_row = max_row + img_num
cell_ref = f'B{img_row}'
ws.add_image(xl_img, cell_ref)
# 删除临时文件
os.unlink(temp_path)
except Exception as e:
print(f"处理图片时出错(页面{page_num}): {e}")
# 保存Excel文件
base_name = os.path.splitext(pdf_file)
excel_filename = f"转换后{base_name}.xlsx"
excel_path = os.path.join(folder_path, excel_filename)
wb.save(excel_path)
success_list.append(pdf_file)
except Exception as e:
print(f"处理文件 {pdf_file} 时出错: {e}")
fail_list.append(pdf_file)
# 输出结果
print("转换成功的PDF文件:")
for file in success_list:
print(file)
print("转换失败的PDF文件:")
for file in fail_list:
print(file)
if __name__ == "__main__":
folder_path = input("请输入文件夹路径: ")
pdf_to_excel(folder_path)
### 使用说明:
1. 运行程序后,输入文件夹路径(例如: C:\Users\YourName\Documents)。
2. 程序会自动处理该文件夹下所有PDF文件,并将生成的Excel文件保存在同一文件夹中。
3. 每个Excel文件以 转换后原文件名.xlsx 命名,其中每个工作表对应PDF的一个页面。
4. 文本内容会按行写入Excel的A列,图片会尝试添加到B列(位置可能不精确)。
5. 程序会列出转换成功和失败的PDF文件。
### 注意事项:
- 图片提取功能可能不适用于所有PDF文件,具体取决于PDF的编码方式。如果遇到问题,建议专注于文本提取。
- 如果PDF是扫描件或仅包含图片,文本提取可能失败,此时可能需要使用OCR库(如 pytesseract),但这会增加复杂性。
- 确保文件夹路径正确,且Python有读写权限。
如果您遇到任何错误,请检查PDF文件是否受损或受密码保护。希望这能帮助您解决问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]