凊风 发表于 2025-10-24 15:51:16

Pdf转存Excel求助~

请问能不能用Python编写:
   1、让用户指定一文件夹;
   2、逐一识别该文件夹下所有PDf文件,然后逐个PDF、逐页、逐行识别每一个PDF下所有文字和图片,把所有识别出来的内容按原页码存入“转换后+原文件名”.excel中;
   3、“转换后+原文件名”.excel亦存入用户之前所指定的文件夹中;
   4、列出转换成功了哪些PDF,失败了哪些PDF。

FishC 发表于 2025-10-24 15:54:03

当然可以!以下是一个使用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]
查看完整版本: Pdf转存Excel求助~