鱼C论坛

 找回密码
 立即注册
查看: 51|回复: 1

Pdf转存Excel求助~

[复制链接]
发表于 前天 15:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

使用道具 举报

发表于 前天 15:54 | 显示全部楼层
当然可以!以下是一个使用Python编写的简单程序,可以实现您的需求。该程序会使用 `pdfplumber` 库提取PDF中的文本,并使用 `openpyxl` 库将文本按页码存入Excel文件。对于图片提取部分,由于PDF中图片的嵌入方式复杂,且Excel中嵌入图片需要额外处理位置和大小,这里我们主要处理文本提取,图片提取部分仅作基本演示(您可能需要根据实际需求调整)。

请注意:运行前请确保安装了必要的库。您可以使用以下命令安装:
  1. pip install pdfplumber openpyxl Pillow
复制代码


以下是完整的代码示例:


  1. import os
  2. import pdfplumber
  3. from openpyxl import Workbook
  4. from openpyxl.drawing.image import Image as XLImage
  5. from PIL import Image
  6. import io
  7. import tempfile

  8. def pdf_to_excel(folder_path):
  9.     # 获取文件夹中所有PDF文件
  10.     pdf_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.pdf')]
  11.     success_list = []
  12.     fail_list = []
  13.    
  14.     for pdf_file in pdf_files:
  15.         pdf_path = os.path.join(folder_path, pdf_file)
  16.         try:
  17.             with pdfplumber.open(pdf_path) as pdf:
  18.                 # 创建Excel工作簿
  19.                 wb = Workbook()
  20.                 # 移除默认工作表
  21.                 wb.remove(wb.active)
  22.                
  23.                 # 逐页处理
  24.                 for page_num, page in enumerate(pdf.pages, start=1):
  25.                     # 为每个页面创建一个工作表
  26.                     ws = wb.create_sheet(title=f"Page_{page_num}")
  27.                     
  28.                     # 提取文本
  29.                     text = page.extract_text()
  30.                     if text:
  31.                         # 将文本按行分割并写入Excel
  32.                         lines = text.split('\n')
  33.                         for row_num, line in enumerate(lines, start=1):
  34.                             ws.cell(row=row_num, column=1, value=line)
  35.                     
  36.                     # 提取图片(基本演示,可能不适用于所有PDF)
  37.                     images = page.images
  38.                     for img_num, img in enumerate(images, start=1):
  39.                         try:
  40.                             stream = img['stream']
  41.                             image_data = stream.get_data()
  42.                             img_pil = Image.open(io.BytesIO(image_data))
  43.                             # 使用临时文件保存图片
  44.                             with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as temp_file:
  45.                                 img_pil.save(temp_file.name)
  46.                                 temp_path = temp_file.name
  47.                             # 将图片添加到Excel(简单放置在文本下方)
  48.                             xl_img = XLImage(temp_path)
  49.                             max_row = ws.max_row if ws.max_row else 1
  50.                             img_row = max_row + img_num
  51.                             cell_ref = f'B{img_row}'
  52.                             ws.add_image(xl_img, cell_ref)
  53.                             # 删除临时文件
  54.                             os.unlink(temp_path)
  55.                         except Exception as e:
  56.                             print(f"处理图片时出错(页面{page_num}): {e}")
  57.                
  58.                 # 保存Excel文件
  59.                 base_name = os.path.splitext(pdf_file)[0]
  60.                 excel_filename = f"转换后{base_name}.xlsx"
  61.                 excel_path = os.path.join(folder_path, excel_filename)
  62.                 wb.save(excel_path)
  63.                 success_list.append(pdf_file)
  64.         except Exception as e:
  65.             print(f"处理文件 {pdf_file} 时出错: {e}")
  66.             fail_list.append(pdf_file)
  67.    
  68.     # 输出结果
  69.     print("转换成功的PDF文件:")
  70.     for file in success_list:
  71.         print(file)
  72.     print("转换失败的PDF文件:")
  73.     for file in fail_list:
  74.         print(file)

  75. if __name__ == "__main__":
  76.     folder_path = input("请输入文件夹路径: ")
  77.     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 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-26 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表