python合并pdf_实用 | 手把手教你用Python分割与合并PDF
访问flyai.club,一键创建你的人工智能项目。
在工作中,可能会涉及处理 pdf 文件,PyPDF2提供了读,分割,合并,文件转换等多种操作,可以让你轻松的处理 pdf 文件。在本文中,我们将学习如何简单的拆分与合并PDF文件。
入门
PyPDF2并不是Python标准库的一部分,因此需要自己安装。最好的方式就是使用pip。
pip install pypdf2
开始学习吧~
拆分PDF
PyPDF2能够将单个PDF分成多个PDF。你只需要告诉它你想要多少页。在这个例子中,我们将从IRS载一个W9表格并遍历,然后拆分每6页并将其转换为自己的独立PDF。
让我们来看看如何:
# pdf_splitter.py import osfrom PyPDF2 import PdfFileReader, PdfFileWriter
def pdf_splitter(path):
fname = os.path.splitext(os.path.basename(path))[0]
pdf = PdfFileReader(path)
for page in range(pdf.getNumPages()):
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf.getPage(page))
output_filename = '{}_page_{}.pdf'.format(
fname, page+1)
with open(output_filename, 'wb') as out:
pdf_writer.write(out) print('Created: {}'.format(output_filename)) if __name__ == '__main__':
path = 'w9.pdf'
pdf_splitter(path)
对于这个例子,我们需要导入PdfFileReader和PdfFileWriter。然后创建一个有趣的小函数pdf_splitter。它接受输入PDF的路径。该函数的第一行将获取输入文件的名称,减去扩展名。接下来我们打开PDF并创建一个阅读器对象。然后我们使用reader对象的getNumPages方法遍历所有页面。
在for循环的内部,我们创建了一个PdfFileWriter的实例。然后,我们使用addPage方法将页面添加到我们的writer对象。这个方法接受一个页面对象,所以为了得到页面对象,我们调用reader对象的getPage方法。现在我们已经为我们的作者对象添加了一个页面。下一步是创建一个唯一的文件名,我们通过使用原始文件名加上单词“page”加上页码+ 1来完成。我们添加一个,因为PyPDF2的页码是从零开始的,所以第0页实际上是第1页。
最后,我们以写入二进制模式打开新的文件名,并使用PDF write对象的写入方法将对象的内容进行存储。
合并多个PDF
现在我们有了一堆PDF,如何把它们合并到一起?
在PyPDF发布时,合并多个PDF的唯一方法就是这样:
# pdf_merger.py import globfrom PyPDF2 import PdfFileWriter, PdfFileReader
def merger(output_path, input_paths):
pdf_writer = PdfFileWriter() for path in input_paths:
pdf_reader = PdfFileReader(path)
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
with open(output_path, 'wb') as fh:
pdf_writer.write(fh)
if __name__ == '__main__':
paths = glob.glob('w9_*.pdf')
paths.sort()
merger('pdf_merger.pdf', paths)
对于每个PDF路径,我们都创建一个PdfFileReader对象,然后遍历它的页面,将每个页面添加到我们的writer对象。然后我们写出writer对象的内容到磁盘。
通过创建一个PdfFileMerger对象,PyPDF2让操作更简单一些:
# pdf_merger2.py import globfrom PyPDF2 import PdfFileMerger
def merger(output_path, input_paths):
pdf_merger = PdfFileMerger()
file_handles = [] for path in input_paths:
pdf_merger.append(path)
with open(output_path, 'wb') as fileobj:
pdf_merger.write(fileobj) if __name__ == '__main__':
paths = glob.glob('w9_*.pdf')
paths.sort()
merger('pdf_merger2.pdf', paths)
在这里,我们只需要创建PdfFileMerger对象,然后遍历PDF路径,将它们附加到我们的合并对象。PyPDF2会自动附加整个文档,所以你不需要循环遍历每个文档的所有页面。然后我们将它写出到磁盘。
PdfFileMerger类也有一个合并,可以使用该方法。它的代码定义如下所示:
def merge(self, position, fileobj, bookmark=None, pages=None, import_bookmarks=True): """
Merges the pages from the given file into the output file at the
specified page number.
:param int position: The *page number* to insert this file. File will
be inserted after the given number.
:param fileobj: A File Object or an object that supports the standard read
and seek methods similar to a File Object. Could also be a
string representing a path to a PDF file.
:param str bookmark: Optionally, you may specify a bookmark to be applied at
the beginning of the included file by supplying the text of the bookmark.
:param pages: can be a :ref:`Page Range ` or a ``(start, stop[, step])`` tuple
to merge only the specified range of pages from the source
document into the output document.
:param bool import_bookmarks: You may prevent the source document's bookmarks
from being imported by specifying this as ``False``.
"""
试一试,看看你能做什么。
— End —
python合并pdf_实用 | 手把手教你用Python分割与合并PDF相关推荐
- 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...
- python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...
- python global用法_14_手把手教你学Python之函数(下)
变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...
- 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!
原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...
- python文本分类_手把手教你在Python中实现文本分类.pdf
手把手教你在Python 中实现文本分类(附代码.数 据集) 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个 或多个已定义好的类别中.文本分类的一些例子如下: • 分析 ...
- python广州地图_手把手教你用Python+可视化工具制作漂亮地图
作者:J哥 这次呢,我想讲讲地图可视化的内容,以前我也写过用Python的内置库绘制地图,但总感觉不够美观.如何才能在短时间内制作漂亮的可视化地图呢,我觉得Python+可视化工具是不错的选择. 以下 ...
- 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...
很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...
- 利用python编写祝福_手把手|教你用Python换个姿势,送狗年祝福语
春节既是一个阖家团圆的节日,也是一个集中问候亲朋好友.了解近况的机会.但是也有很多人过年也不能聚在一起,所以就会会选择发短信这一方式来表达自己的祝福.其中大多人都是复制转发,让人一眼就看穿,显得自己在 ...
- python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!
作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...
最新文章
- java xml 拆分_java – 如何使用VTDGenHuge将大型xml拆分成小块?
- Android 多进程调试技巧
- golang 命令汇总
- Linux 下判断Server 内存是否不足
- Ribbon负载均衡策略配置
- 入门Python难不难?零基础到底要怎么学Python?
- html检查链接正确代码,Groovy脚本检查html坏链接
- 【英语-刘晓艳-词汇】词汇06
- 应用程序如何链接静态QT Plugin库
- 计算机网络自顶向下-运输层
- 详解MySQL双活同步复制四种解决方案
- ++i i++
- 【20点埃及 VS 乌拉圭/23点摩洛哥vs 伊朗】快看人工只能预测结果(附最全赛事时间表)...
- 0016_光源和打光(1)
- google机器学习速成教程学习笔记
- 我实现的一些Abp模块
- java 雷霆战机 教程,java swing实现简单的雷霆战机小游戏项目源码附带视频指导修改教程...
- 有道云笔记网页剪chrome登录不上,反复登录问题
- LEHDLAB-实验记录
- vgpu服务器显卡性能,如何在vGPU环境中优化GPU性能
热门文章
- 如何破坏双亲委派模型
- IT项目经理在面试时如何巧妙的回答老板提出的问题
- centos7 SSH服务启动时报“main process exited, code=exited”status 255错误
- Django项目实践(商城):十五、商品列表页面
- 半导体行业岗位选择及专业匹配度规划
- 百家讲坛_我读经典17_《易经》与人生-曾仕强(转)
- YoloV5 + deepsort + Fast-ReID 完整行人重识别系统(三)
- hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
- 嵌入式毕设分享 stm32人体健康状态检测系统(项目开源)
- vue组件 孙组件 调用爷组件(祖父组件)的方法