访问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相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  3. python global用法_14_手把手教你学Python之函数(下)

    变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...

  4. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  5. python文本分类_手把手教你在Python中实现文本分类.pdf

    手把手教你在Python 中实现文本分类(附代码.数 据集) 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个 或多个已定义好的类别中.文本分类的一些例子如下: • 分析 ...

  6. python广州地图_手把手教你用Python+可视化工具制作漂亮地图

    作者:J哥 这次呢,我想讲讲地图可视化的内容,以前我也写过用Python的内置库绘制地图,但总感觉不够美观.如何才能在短时间内制作漂亮的可视化地图呢,我觉得Python+可视化工具是不错的选择. 以下 ...

  7. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  8. 利用python编写祝福_手把手|教你用Python换个姿势,送狗年祝福语

    春节既是一个阖家团圆的节日,也是一个集中问候亲朋好友.了解近况的机会.但是也有很多人过年也不能聚在一起,所以就会会选择发短信这一方式来表达自己的祝福.其中大多人都是复制转发,让人一眼就看穿,显得自己在 ...

  9. python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!

    作者 | 周志鹏 责编 | 郭   芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...

最新文章

  1. java xml 拆分_java – 如何使用VTDGenHuge将大型xml拆分成小块?
  2. Android 多进程调试技巧
  3. golang 命令汇总
  4. Linux 下判断Server 内存是否不足
  5. Ribbon负载均衡策略配置
  6. 入门Python难不难?零基础到底要怎么学Python?
  7. html检查链接正确代码,Groovy脚本检查html坏链接
  8. 【英语-刘晓艳-词汇】词汇06
  9. 应用程序如何链接静态QT Plugin库
  10. 计算机网络自顶向下-运输层
  11. 详解MySQL双活同步复制四种解决方案
  12. ++i i++
  13. 【20点埃及 VS 乌拉圭/23点摩洛哥vs 伊朗】快看人工只能预测结果(附最全赛事时间表)...
  14. 0016_光源和打光(1)
  15. google机器学习速成教程学习笔记
  16. 我实现的一些Abp模块
  17. java 雷霆战机 教程,java swing实现简单的雷霆战机小游戏项目源码附带视频指导修改教程...
  18. 有道云笔记网页剪chrome登录不上,反复登录问题
  19. LEHDLAB-实验记录
  20. vgpu服务器显卡性能,如何在vGPU环境中优化GPU性能

热门文章

  1. 如何破坏双亲委派模型
  2. IT项目经理在面试时如何巧妙的回答老板提出的问题
  3. centos7 SSH服务启动时报“main process exited, code=exited”status 255错误
  4. Django项目实践(商城):十五、商品列表页面
  5. 半导体行业岗位选择及专业匹配度规划
  6. 百家讲坛_我读经典17_《易经》与人生-曾仕强(转)
  7. YoloV5 + deepsort + Fast-ReID 完整行人重识别系统(三)
  8. hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
  9. 嵌入式毕设分享 stm32人体健康状态检测系统(项目开源)
  10. vue组件 孙组件 调用爷组件(祖父组件)的方法