|
|
当然可以!以下是一个使用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 = [f for f in os.listdir(folder_path) if f.lower().endswith('.pdf')]
- 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)[0]
- 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 小助理,如未能正确解答您的问题,请继续追问。 |
|