给纯小白的Python操作 PDF 笔记

一、文件基础

  1. 打开与关闭

    • 推荐用 with open(path, mode, encoding='utf-8') as f:,自动完成 close(),避免泄露文件句柄。
    • 常见模式:'r' 读,'w' 写覆盖,'a' 追加,'rb'/'wb' 二进制。
    • Windows 默认编码为 GBK,Linux/Mac 为 UTF-8;跨平台脚本务必显式指定 encoding。
  2. 文本读写

    • f.read() 一次读全部;f.readline() 逐行;f.readlines() 得列表。
    • 追加写入:with open('test.txt','a',encoding='utf-8') as f: f.write('xxx')
  3. 路径与编码错误

    • 绝对路径:C:/Users/...(正斜杠或双反斜杠)。
    • 相对路径:以脚本所在目录为基准,可用 os.path.join() 拼接。
    • 遇到 UnicodeDecodeError 时,尝试 encoding='utf-8-sig''gbk'

二、PDF 处理(PyPDF2 + pdfplumber 组合拳)

  1. 环境准备
   pip install PyPDF2 pdfplumber pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 读取文字
   import pdfplumberwith pdfplumber.open('demo.pdf') as pdf:for page in pdf.pages:print(page.extract_text())
  1. 读取表格
   all_tables = []with pdfplumber.open('demo.pdf') as pdf:for p in pdf.pages:for table in p.extract_tables():all_tables.extend([row for row in table if any(row)])df = pd.DataFrame(all_tables)df.to_excel('pdf_table.xlsx', index=False, header=False)
  1. 合并 PDF(PyPDF2)
   from PyPDF2 import PdfMergermerger = PdfMerger()for pdf in ['1.pdf', '2.pdf']:merger.append(pdf)merger.write('merged.pdf')merger.close()
  1. 添加水印(注意层级顺序)
   from PyPDF2 import PdfFileReader, PdfFileWriterbase = PdfFileReader('src.pdf')watermark = PdfFileReader('water.pdf').getPage(0)writer = PdfFileWriter()for i in range(base.getNumPages()):page = base.getPage(i)# 先底层内容,后水印;若水印被文字遮挡,可调整水印透明度或在生成水印 PDF 时放到底层page.mergePage(watermark)   # mergePage 会把两页叠加,watermark 在上层writer.addPage(page)with open('res_watermarked.pdf', 'wb') as f:writer.write(f)

课堂踩坑:水印盖字 → 在水印 PDF 里把文字透明度降低或置底后再合并。

  1. Word → PDF(Windows 专用,pypiwin32)
   import win32com.client as win32word = win32.Dispatch('Word.Application')doc = word.Documents.Open(r'C:\abs\path\template.docx')doc.ExportAsFixedFormat('template.pdf', 17)  # 17=pdfdoc.Close(); word.Quit()

三、实战小结

  • 文件操作牢记 with+encoding;PDF 处理分清 pdfplumber(读取)与 PyPDF2(编辑)。
  • 合并、加水印前先用小文件调试,避免一次性加载大 PDF 导致内存爆炸。
  • 路径/编码问题优先排查打印 os.getcwd() 与显式 encoding。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93899.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue使用vue-cropper实现图片裁剪之单图裁剪

vue制作的pc系统中(如若依系统),需要实现按照固定尺寸进行裁剪后再进行图片上传,以下代码讲述的是实现单张图片裁剪上传。1.第一步需要安装vue-croppernpm install vue-cropper2.第二步在需要的页面进入代码引入import {VueCropper} from "vue-crop…

后台管理系统-5-vue3之子路由渲染首页及卡片容器和表格容器实现

文章目录 1 子路由的实现 1.1 router/index.js 1.2 views/Home.vue(首页) 1.3 Main.vue 2 左上方的卡片 2.1 分栏间隔(Layout布局) 2.2 卡片容器(el-card) 2.3 整体代码Home.vue 3 左下方的table(静态实现) 3.1 准备数据 3.2 渲染表格(el-table) 3.3 整体代码Home.vue 4 附录 子…

在CentOS系统中查询已删除但仍占用磁盘空间的文件

在CentOS系统中查询已删除但仍占用磁盘空间的文件在CentOS系统中查询已删除但仍占用磁盘空间的文件1. 检查磁盘整体使用情况2. 查找被删除但仍被进程占用的文件3. 释放磁盘空间4. 替代方案(不终止进程)注意事项补充工具在CentOS系统中查询已删除但仍占用…

正点原子【第四期】Linux之驱动开发学习笔记-1.1 Linux驱动开发与裸机开发的区别

前言: 本文是根据哔哩哔哩网站上“正点原子【第四期】手把手教你学Linux系列课程之 Linux驱动开发篇”视频的学习笔记,该课程配套开发板为正点原子alpha/mini Linux开发板。在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内…

Android SystemServer 中 Service 的创建和启动方式

今天导师给我将讲了一些如何新建一个系统服务,以及如何去初始化。 Android SystemServer 中 Service 的创建和启动方式 在 Android 系统中,SystemServer 是系统服务的核心进程,负责启动和管理各种系统服务。以下是 SystemServer 中服务创建和…

SQL SERVER中位数

有11家门店数据,要求每天所有门店的各个指标的中位数1.第一种做法,使用PERCENTILE_CONT() 函数 SQL SERVER 2012 版本及以上PERCENTILE_CONT 函数简介PERCENTILE_CONT 是 SQL 中的窗口函数,用于计算连续百分位数&#…

【java中springboot引入geotool】

学习目标: 在Spring Boot项目中引入GeoTools库,可以按照以下步骤进行:理解GeoTools库的基本信息和用途 GeoTools是一个开源的Java库,用于处理地理信息系统(GIS)数据。它提供了对空间数据的读取、写入、查询…

多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)

如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu) 📖 摘要 在实际开发中,往往会遇到既要维护老项目又要跟进新特性的场景,这就需要在一台机器上同时安装并切换多个Java JDK版本。本…

力扣57:插入区间

力扣57:插入区间题目思路代码题目 给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval […

KVM虚拟化技术解析:从企业应用到个人创新的开源力量

1 .KVM:开源虚拟化的核心引擎 KVM(Kernel-based Virtual Machine)作为Linux内核原生集成的开源虚拟化模块,彻底改变了现代数据中心的虚拟化格局。它通过将Linux内核转变为Type-1型虚拟机监控器(Hypervisor)…

28.Linux :通过源代码编译安装lamp

Linux :通过源代码编译安装lamp 区别特性源代码编译安装yum 安装安装方式从源代码编译构建预编译的二进制包自定义程度高度可定制有限定制性能优化可针对特定硬件优化通用优化依赖管理手动解决依赖关系自动解决依赖安装复杂度复杂,需技术经验简单&#x…

应用控制技术

一、 应用特征识别技术1.传统行为检测技术1.1 五元组检测原理1.2 配置思路1.3 效果展示需求背景21.4 传统行为检测的缺陷无法识别应用层内容:若应用更换端口(如QQ改用随机端口)或伪装协议(如HTTPS加密),传统…

当MySQL的int不够用了

关于int的长度很多时候看到int(8)这样的定义,其实这是工具导出的不专业。int是范围,不是长度。在开发有了共识(知道这个长度不算数,要看范围)以后,上来就是所有的类型都是bigint。int的范围int的取值范围是…

让AI学会“边做边想“:ReAct的实战指南

小智的求职困境有个叫小智的AI助手,它刚从"大语言模型大学"毕业,满怀信心地去应聘一家咨询公司的智能助理职位。面试官问:"北京和上海哪个城市人口更多?"小智立刻回答:"根据我的知识&#xf…

vue优化有哪些手段?

vue本身存在的方法 v-if 和v-show 的合理运用,频繁使用的组件使用v-show,不频繁的使用v-if,来减少dom的渲染路由懒加载 采用()>import(index.vue)当路由被访问的时候才回去加载使用keep-alive缓存页面,减少没必要的重复渲染同时也可以减少服务器的压力使用computed缓存数据,…

【图像算法 - 14】精准识别路面墙体裂缝:基于YOLO12与OpenCV的实例分割智能检测实战(附完整代码)

摘要: 裂缝是结构健康的重要隐患,传统人工巡检耗时耗力且易遗漏。本文将带您利用当前最先进的YOLO12实例分割模型,构建一个高效、准确、更高精度的裂缝检测系统。我们将从数据准备、模型训练到结果可视化,手把手实现一个完整的项目…

“让机器人更智慧 让具身体更智能”北京世界机器人大会行业洞察

2025年8月8日,世界机器人大会在北京盛大开幕。本届大会以“让机器人更智慧 让具身体更智能”为主题,由中国电子学会、世界机器人合作组织主办,包括开幕式、闭幕式、论坛等。同期举办世界机器人博览会、世界机器人大赛等活动,打造了…

PHP如何使用JpGraph生成折线图?

JpGraph是一个功能强大的PHP图表库,它通过封装GD库函数,为开发者提供了简单高效的数据可视化解决方案。作为专门用于绘制统计图的面向对象库,JpGraph支持创建折线图、柱状图、饼图等20余种图表类型,并能自动处理坐标轴、刻度、图例…

超级云平台:重构数字生态的“超级连接器“

在数字经济浪潮席卷全球的今天,企业数字化转型已从"选择题"变为"必答题"。然而,传统云服务模式因技术壁垒高、资源分散、协同效率低等问题,让许多企业在数字化转型中陷入"上云易、用云难"的困境。 在此背景下,一种以"全域资源整合+智能…

https如何保证传递参数的安全

HTTPS 并非直接“加密参数”,而是通过一整套加密传输机制,确保客户端与服务器之间所有通信内容(包括 URL 参数、表单数据、Cookie 等)在传输过程中不被窃听、篡改或伪造。其核心安全保障来自以下技术实现: 一、核心加密…