首页 文章 精选 留言 我的

精选列表

搜索[自动出价],共10000篇文章
优秀的个人博客,低调大师

用Python拆分PDF图纸并自动命名

# 原本吭哧吭哧1小时的活,现在5分钟搞定!! ![](https://developer.qcloudimg.com/http-save/yehe-12716931/738be2fc15a7fd6e09121c20f944f336.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/616934bbdf1ce0f54a5dd1e8492cb92f.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/a5a083a193b292ba031be98b730fdac9.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/b5fec2500ef10daf799bb2a28cf009a3.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/7043b65baeac2511e3e6ddbe20224bce.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/0b0ace61bd6cbbb7e23a4d284e331cea.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/2091cb86896cf33359f90adc2f6e0164.jpg) ![](https://developer.qcloudimg.com/http-save/yehe-12716931/830e90b8cd57c0652bf1fa022aa07e2c.jpg) ``` import os import re import sys import logging from pathlib import Path from collections import defaultdict # 检查并导入所需库 try: import pdfplumber from pypdf import PdfReader, PdfWriter except ImportError: print("请先安装依赖库:在命令行中运行以下命令") print("pip install pypdf pdfplumber") sys.exit(1) # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) # ====== 请确认下面的路径是否正确 ====== input_pdf = r"C:\Users\ting9\Desktop\Python文件夹\图纸.pdf" # ======================================= def extract_part_number(page_text: str, page_num: int) -> str | None: """ 从页面文本中提取零件图号 支持"零件图号:"或"零件图号 "(冒号或空格)后的内容 """ # 匹配"零件图号"后面跟冒号或空格,再跟图号 match = re.search(r'零件图号[::\s]+([A-Z0-9\-_\.]+)', page_text, re.IGNORECASE) if match: return match.group(1) return None def main(): # 检查输入文件是否存在 if not os.path.exists(input_pdf): logger.error(f"文件不存在:{input_pdf}") sys.exit(1) # 输出文件夹 output_dir = Path(input_pdf).parent / "拆分PDF" output_dir.mkdir(exist_ok=True) logger.info(f"输出目录:{output_dir}") try: logger.info("正在扫描所有页面,提取图号...") part_to_pages = defaultdict(list) unknown_pages = [] with pdfplumber.open(input_pdf) as pdf_plumb: total_pages = len(pdf_plumb.pages) logger.info(f"共检测到 {total_pages} 页,开始扫描...") for page_num in range(total_pages): plumb_page = pdf_plumb.pages[page_num] page_text = plumb_page.extract_text() or "" # 提取图号 part_number = extract_part_number(page_text, page_num + 1) if part_number: safe_name = re.sub(r'[\\/*?:"<>|]', '_', part_number) part_to_pages[safe_name].append(page_num) logger.info(f"第 {page_num+1} 页提取到图号:'{part_number}'") else: unknown_pages.append(page_num) # ---------- 输出统计信息 ---------- logger.info("=" * 60) logger.info("图号统计:") for part_number, page_list in part_to_pages.items(): pages_str = ", ".join(str(p+1) for p in sorted(page_list)) logger.info(f" {part_number}: {len(page_list)} 页 (页码: {pages_str})") logger.info(f"未识别页面: {len(unknown_pages)} 页") logger.info("=" * 60) # ---------- 第二步:按图号分组写入PDF ---------- pdf_reader = PdfReader(input_pdf) used_filenames = set() # 处理已识别图号的页面 for part_number, page_list in part_to_pages.items(): original_name = part_number safe_name = original_name suffix = 1 while safe_name in used_filenames: safe_name = f"{original_name}_{suffix}" suffix += 1 used_filenames.add(safe_name) writer = PdfWriter() for page_num in sorted(page_list): writer.add_page(pdf_reader.pages[page_num]) output_path = output_dir / f"{safe_name}.pdf" with open(output_path, "wb") as out_f: writer.write(out_f) logger.info(f"已保存 '{part_number}',共 {len(page_list)} 页") # 处理未识别图号的页面 for page_num in sorted(unknown_pages): safe_name = f"未识别_{page_num + 1:03d}" original_name = safe_name suffix = 1 while safe_name in used_filenames: safe_name = f"{original_name}_{suffix}" suffix += 1 used_filenames.add(safe_name) writer = PdfWriter() writer.add_page(pdf_reader.pages[page_num]) output_path = output_dir / f"{safe_name}.pdf" with open(output_path, "wb") as out_f: writer.write(out_f) logger.info(f"已保存未识别页面(原第 {page_num + 1} 页)") logger.info(f"拆分完成!文件保存在:{output_dir}") except Exception as e: logger.exception(f"处理PDF时发生错误:{e}") sys.exit(1) if __name__ == "__main__": main() main() ```

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册