一、引言
在数字化的浪潮中,PDF文件格式以其稳定性和兼容性成为了信息交流的宠儿。然而,当我们需要编辑这些PDF文件时,往往会遇到各种难题。今天,我要和大家分享的,是如何将PDF文件轻松转换成Word和Excel格式,让编辑变得轻而易举。
二、技术分享
首先,让我们揭开PDF转换技术的神秘面纱。PDF文件以其固定布局著称,这既是它的优点,也是它在编辑时的难点。要将PDF转换为Word或Excel,我们需要解析PDF的布局和内容,并将其重新格式化为Word文档或Excel表格。这涉及到复杂的文本识别和格式转换技术。
1,PDF转Word
from pdf2docx import Converter
# pdf转word方法 def pdf_to_word(pdf_path, word_path=None, page_nums=None): ''' @方法名称: pdf转word @中文注释: pdf转word @入参: @param pdf_path str pdf文件路径 @param page_nums str 页码序号 @出参: @返回状态: @return 0 失败或异常 @return 1 成功 @返回错误码 @返回错误信息 @param doc_file str word文件名 @作 者: PandaCode辉 @weixin公众号: PandaCode辉 @创建时间: 2024-12-17 @使用范例: pdf_to_word('test.pdf') ''' global cv result_dict = {} try: if not type(pdf_path) is str: result_dict["error_code"] = "111111" result_dict["error_msg"] = "pdf文件路径参数类型错误,不为字符串" return result_dict # 检查PDF文件是否存在 if not os.path.isfile(pdf_path): result_dict["error_code"] = "999999" result_dict["error_msg"] = f"PDF文件未找到: {pdf_path}" return result_dict start_time = time.time() if not word_path: # 使用os.path.basename()获取文件名 file_path = os.path.dirname(pdf_path) # 使用os.path.basename()获取文件名 file_name = os.path.basename(pdf_path) # 提取文件名,去除文件后缀 file_name = file_name.split('.')[0] # print(file_name) # word文件名+路径 word_path = os.path.join(file_path, f'{file_name}.docx') # print(word_path) # 初始化转换器 cv = Converter(pdf_path) # 转换整本PDF或指定页码 if page_nums: # 解析页码参数 pages = [] for part in page_nums.split(','): if '-' in part: start, end = part.split('-') pages.extend(range(int(start) - 1, int(end))) else: pages.append(int(part) - 1) # 转换指定页码 cv.convert(docx_filename=word_path, pages=pages) else: # 转换整本PDF cv.convert(docx_filename=word_path, start=0) # 保存为Word文档 cv.close() # 识别时间 end_time = time.time() # 计算耗时差,单位毫秒 recognize_time = (end_time - start_time) * 1000 # 保留2位小数 recognize_time = round(recognize_time, 2) # print('处理时间:' + str(recognize_time) + '毫秒') result_dict["recognize_time"] = recognize_time result_dict["error_code"] = "000000" result_dict["error_msg"] = "pdf转word成功" # 使用os.path.basename()获取文件名 word_file_name = os.path.basename(word_path) # 打印结果 # print("文件名:", word_file_name) result_dict["filename"] = word_file_name result_dict["file_size_mb"] = file_size_mb return result_dict except Exception as e: cv.close() print("pdf转word异常," + str(e)) result_dict["error_code"] = "999999" result_dict["error_msg"] = "PDF到Word转换过程中发生错误," + str(e) return result_dict
2,PDF转Excel
from docx import Document
import pandas as pd
# pdf转excel方法 def pdf_to_excel(pdf_path, xlsx_path=None, page_nums=None): ''' @方法名称: pdf转excel @中文注释: pdf转excel @入参: @param pdf_path str pdf文件路径 @param page_nums str 页码序号 @出参: @返回状态: @return 0 失败或异常 @return 1 成功 @返回错误码 @返回错误信息 @param xlsx_file str excel文件名 @作 者: PandaCode辉 @weixin公众号: PandaCode辉 @创建时间: 2025-01-06 @使用范例: pdf_to_excel('test.pdf') ''' global cv result_dict = {} try: if not type(pdf_path) is str: result_dict["error_code"] = "111111" result_dict["error_msg"] = "pdf文件路径参数类型错误,不为字符串" return result_dict # 检查PDF文件是否存在 if not os.path.isfile(pdf_path): result_dict["error_code"] = "999999" result_dict["error_msg"] = f"PDF文件未找到: {pdf_path}" return result_dict start_time = time.time() # 使用os.path.basename()获取文件名 file_path = os.path.dirname(pdf_path) # 使用os.path.basename()获取文件名 file_name = os.path.basename(pdf_path) # 提取文件名,去除文件后缀 file_name = file_name.split('.')[0] # print(file_name) # word文件名+路径 word_path = os.path.join(file_path, f'{file_name}.docx') # print(word_path) if not xlsx_path: # xlsx文件名+路径 xlsx_path = os.path.join(file_path, f'{file_name}.xlsx') # print(xlsx_path) # 第一步,先将pdf转成doc文档 rsp_dict = pdf_to_word(pdf_path, page_nums=page_nums) if rsp_dict["error_code"] == "000000": # 第二步,再读取doc文档,转成xlsx文档 # 打开Word文档 doc = Document(word_path) if len(doc.tables) < 1: result_dict["error_code"] = "999999" result_dict["error_msg"] = "PDF文件未找到表格内容,无法转成xlsx文档." return result_dict # 创建一个Excel writer对象 with pd.ExcelWriter(xlsx_path, engine='openpyxl') as writer: # 遍历文档中的所有表格 for i, table in enumerate(doc.tables, start=1): # 创建一个空的DataFrame来存储表格数据 data = [] # 遍历表格中的所有行 for row in table.rows: # 遍历行中的所有单元格 row_data = [] for cell in row.cells: row_data.append(cell.text) data.append(row_data) # 将数据转换为DataFrame df = pd.DataFrame(data) # 将DataFrame保存到Excel的不同工作表中 sheet_name = f"Table_{i}" df.to_excel(writer, sheet_name=sheet_name, index=False, header=False) # print(f"转换完成,结果保存在{xlsx_path}中。") else: result_dict["error_code"] = rsp_dict["error_code"] result_dict["error_msg"] = rsp_dict["error_msg"] return result_dict # 识别时间 end_time = time.time() # 计算耗时差,单位毫秒 recognize_time = (end_time - start_time) * 1000 # 保留2位小数 recognize_time = round(recognize_time, 2) # print('处理时间:' + str(recognize_time) + '毫秒') result_dict["recognize_time"] = recognize_time result_dict["error_code"] = "000000" result_dict["error_msg"] = "pdf转excel成功" # 使用os.path.basename()获取文件名 xlsx_file_name = os.path.basename(xlsx_path) result_dict["filename"] = xlsx_file_name return result_dict except Exception as e: print("pdf转excel异常," + str(e)) result_dict["error_code"] = "999999" result_dict["error_msg"] = "PDF到excel转换过程中发生错误," + str(e) return result_dict
三、我的小程序工具
为了让不擅长编程的用户也能轻松完成这一转换,我开发了一个小程序工具。这个工具集成了强大的PDF解析和转换功能,用户只需上传PDF文件,选择转换格式,即可快速得到Word或Excel文件。
1,PDF转Word
PDF转Word是小程序的明星功能之一。它不仅能够精确地保留原文的格式和布局,还能识别图片和表格,确保转换后的Word文档与原PDF高度一致。这对于需要编辑PDF内容的用户来说,无疑是一大福音。
右上角有个反馈按钮,如果你在使用小程序的过程有什么问题,可以即时向我反馈,或者有好的功能建议,也可以提出,有空有能力我会尽量满足大家的需求。
2,PDF转Excel
另一个实用的功能是PDF转Excel。这项功能特别适合那些包含大量数据或表格的PDF文件。通过识别和转换,PDF中的数据能够完美地呈现在Excel表格中,方便用户进行数据分析和处理。
右上角有个反馈按钮,如果你在使用小程序的过程有什么问题,可以即时向我反馈,或者有好的功能建议,也可以提出,有空有能力我会尽量满足大家的需求。
3,扫描下方二维码立即体验,开启高效便捷的新生活!
四、目标群体
这个小程序工具主要面向那些不擅长编程,但又经常需要处理PDF文件的用户。无论是学生、教师、办公室工作人员,还是其他任何需要编辑PDF文件的人,这个工具都能为他们提供极大的便利。
五、结尾总结
在数字化的今天,PDF文件转换是一项非常实用的技能。通过我的小程序工具,即使是不懂编程的用户也能轻松完成PDF到Word和Excel的转换。这不仅提高了工作效率,也让文档处理变得更加简单愉快。
六、互动提问
如果你对PDF转换有任何疑问,或者想要了解更多关于这个小程序工具的信息,欢迎在评论区留言提问。我会尽力回答每一个问题,希望能帮助到大家。
如果你在使用小程序的过程有什么问题,可以即时向我反馈,或者有好的功能建议,也可以提出,有空有能力我会尽量满足大家的需求。
标签:Word,time,Excel,dict,result,pdf,PDF,path From: https://www.cnblogs.com/xh2023/p/18676564