PDF的基本操作主要是读取、创建,合并等操作。使用Python的第三方包PyPDF2.读写合并PDF文件变得非常简单。本文最后给出PDF合并的程序,供参考使用。

欢迎关注我的个人公众号:数学编程,以及

安装依赖包

使用Python的pip进行安装,安装包名称大小写不敏感。

pip install PyPDF2

查看基本的类和方法

进入包的__init__.py文件可以看到主要的几个类和方法

from .pdf import PdfFileReader, PdfFileWriter

from .merger import PdfFileMerger

from .pagerange import PageRange, parse_filename_page_ranges

from ._version import __version__

__all__ = ["pdf", "PdfFileMerger"]

从名称上可以看出提供了基本的操作方法,分别是读取,写入和合并,其中合并可以认为是读取然后 再写入的操作。

读取和写入PDF

读取PDF非常简单,直接使用PdfFileReader这个类,先来看看这个类的参数

class PdfFileReader(object):

"""

Initializes a PdfFileReader object. This operation can take some time, as

the PDF stream's cross-reference tables are read into memory.

:param stream: 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 bool strict: Determines whether user should be warned of all

problems and also causes some correctable problems to be fatal.

Defaults to ``True``.

:param warndest: Destination for logging warnings (defaults to

``sys.stderr``).

:param bool overwriteWarnings: Determines whether to override Python's

``warnings.py`` module with a custom implementation (defaults to

``True``).

"""

def __init__(self, stream, strict=True, warndest = None, overwriteWarnings = True):

其中必须传入的参数是stream,文件流而不是文件名称。 而PDF的创建不需要传入参数。

from PyPDF2 import PdfFileReader, PdfFileWriter

infn = 'infn.pdf'

outfn = 'outfn.pdf'

# 获取一个 PdfFileReader 对象

pdf_input = PdfFileReader(open(infn, 'rb'))

# 获取 PDF 的页数

page_count = pdf_input.getNumPages()

print(page_count)

# 返回一个 PageObject

page = pdf_input.getPage(i)

# 获取一个 PdfFileWriter 对象

pdf_output = PdfFileWriter()

# 将一个 PageObject 加入到 PdfFileWriter 中

pdf_output.addPage(page)

# 输出到文件中

pdf_output.write(open(outfn, 'wb'))

合并多个PDF

合并多个PDF就读取多个文件,然后写入一个文件中。不过这样需要计算页面数,不如直接用PdfFileMerger,提供了append方法

from PyPDF2 import PdfFileReader, PdfFileMerger

def read_pdf(pdf_name):

stream = open(pdf_name, "rb")

reader = None

try:

reader = PdfFileReader(stream)

except Exception as e:

print(e)

return reader

def merge_pdf(pdfs, output_name = "merge.pdf"):

merge = PdfFileMerger()

for pdf_name in pdfs:

pdf_obj = read_pdf(pdf_name)

print("开始合并 《%s》 页面数: %s" % (pdf_name, pdf_obj.getNumPages()))

merge.append(pdf_obj)

merge.write(open(output_name, "wb"))

print("合并后总页面数:", merge.id_count)

print("写入当前目录", output_name)

if __name__ == '__main__':

pdfs = [

"file1.pdf", "file2.pdf", "file3.pdf"

]

merge_pdf(pdfs)

输出结果:

开始合并 《file1.pdf》 页面数: 28

开始合并 《file2.pdf》 页面数: 34

开始合并 《file3.pdf》 页面数: 38

合并后总页面数: 100

写入当前目录 merge.pdf

总结

PDF文件的合并是很常用的操作,Python在处理PDF文件方面非常简单,主要原因是别人已经封装好了包,只需要简单的调用就能满足基本需求。文章的最后给出了一个简单合并多个PDF的程序用例,供参考使用。

python读写pdf_Python读写PDF相关推荐

  1. python filetype pdf_Python整合pdf【新手必学】

    在下载课件时往往会分成很多个小的pdf,一个也就几页,想要整合成一整个大pdf,于是百度了一下,网上有很多在线的pdf整合器,但是由于这蛋疼的网速,流量还要花钱,还是想要本地搞. 说python是万能 ...

  2. io python 读取pdf_Python读取PDF文件--pdfminer

    作者使用的是Python3.6版本. pdfminer在Python2和Python3中的安装和使用有一定的区别,本文以Python为例. 首先安装pdfminer pip install pdfmi ...

  3. python数据处理pdf_Python数据处理pdf (中文版带书签)、原书代码、数据集

    原博文 2018-08-08 16:02 − Python数据处理 前言 xiii第1 章 Python 简介 11.1 为什么选择Python 41.2 开始使用Python 41.2.1 Pyth ...

  4. python txt文件读写(追加、覆盖)

    python txt文件读写(追加.覆盖) 读取文件每一行 # 读取文件每一行 with open(r"C:\Users\xiahuadong\Desktop\数字人代码\文件行数.txt& ...

  5. 以下不是python文件读写方法的是-使用Python进行二进制文件读写的简单方法(推荐)...

    总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块. python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据 ...

  6. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  7. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 Python使用openpyxl读取excel文件中数据 Python使用openpyxl往excel文件中写入数据 Python使用openpyx ...

  8. python 二进制文件_使用Python进行二进制文件读写的简单方法(推荐)

    总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块. python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据 ...

  9. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  10. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

最新文章

  1. 看看人家 SpringBoot 的全局异常处理,多么优雅...
  2. linux shell 判断文件 修改时间和系统时间差
  3. python基础05
  4. 程序员下班后收到工作信息怎么办?
  5. vue图片压缩不失真_图片压缩会失真?快试试这几个无损压缩神器。
  6. 关于黑名单和白名单的一些思考
  7. linux系统下安装和配置redis(2021版)
  8. (14)FPGA面试题线与逻辑
  9. 深入浅出Docker(四):Docker的集成测试部署之道
  10. html 文本框 获取焦点事件,JS的文本输入框获得焦点与失去焦点的事件
  11. Python3 字节码详解
  12. 简单三个步骤网站建设
  13. 手机怎么识别图片上的文字
  14. minui点击分页控件后滚动条置顶
  15. 了解Nape 2d物理引擎 第一天
  16. python 恶搞(仿粽子写的)
  17. 桌面文件夹不见了怎么恢复?4招教你找回消失的文件夹
  18. C++ Cstring类型使用
  19. win10 + Ubuntu 20.04 LTS 双系统安装 (UEFI + GPT)(图文,多图预警)
  20. 如何快捷得去除代码中的行号?

热门文章

  1. 手机操作系统学习总结
  2. Linux(CentOS) 下安装字体
  3. excel 如何根据身份证号自动匹配性别代码
  4. Ubuntu20.04安装Redis
  5. 递归算法经典实例python-递归案例python
  6. css3数字滚动特效
  7. USBVIEW(带已分配带宽显示功能)-电脑圈圈
  8. Doom启示录(一)---李乃峰所崇拜之 两个约翰!
  9. win10搭建无盘服务器配置,win10电脑搭建无盘工作站
  10. dynamips模拟器的安装