使用Python将多个pdf指定页整合到一个pdf文件中

在工作的一些场景中,有时需要我们将多个pdf文件中的内容提取出来,比如有10个pdf文件,我们要统一打印pdf文件的第一页或者最后一页…

需求分析

我们需要批量提取PDF文件中的任意一页,可以是第一页也可以是中间某一页,也可以是最后一页。安装我们操作数组的逻辑,当我们输入整数的时候页面从前开始算,输入负数时页面从后开始算。

如果要提取的某一页不存在,则跳过改文件操作,提取下一个文件。

代码实现

这个需求需要使用操作PDF神器PyPDF2库,首先安装该管理包

pip install PyPDF2

然后验证该管理包是否安装成功,可以再Python环境文件中import改库,如果没有保持这标识已经安装成功,你可以在项目中使用该库。


# 如果没有报错,表示成功导入 PyPDF2
import PyPDF2

这里主要使用PdfReaderPdfWriter这两个读写Api;

为了方便操作,这里集中将pdf文档都放到一个名为pdf的文件夹中,脚本程序去该文件夹中读取要操作的文件;

另外为了动态读取页面,将要获取的页码写在一个名为config.txt的文件中

具体代码实现

from PyPDF2 import PdfReader, PdfWriter
import glob
 
def split_combine(path, pdf_writer):
    pdf = PdfReader(path)
    print(len(pdf.pages))
    print(path + '\n')
    # lastest page
    filename = "config.txt"
    with open(filename) as file_object:
        count = file_object.read()
        print(count)
    if int(count) <= len(pdf.pages) and int(count) >=0:
        page = pdf.pages[int(count)]
        pdf_writer.add_page(page)
    elif int(count) < 0 and int(count) >= -len(pdf.pages):
        page = pdf.pages[int(count)]
        pdf_writer.add_page(page)
    else:
        print('输入的页码不正确')
 
if __name__ == '__main__':
    # get curren dir pdf files
    pdf_list = glob.glob('pdf/*.pdf')
    pdf_writer = PdfWriter()
    for i, pdf_file in enumerate(pdf_list):
        print(pdf_file)
        split_combine(pdf_file, pdf_writer)
    with open('new.pdf', 'wb') as output_pdf:
        pdf_writer.write(output_pdf)

这里说一下if __name__ == '__main__' 是什么意思?

name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,if 以下代码块将被运行,当模块是被导入时,代码块不被运行。

将Python脚本生成exe可执行文件

安装

这里使用了py2exe打包,安装py2exe,使用pip:

pip install py2exe

打包Python脚本

这里的Python脚本是get_pdf_page.py,需要创建一个名为setup.py的配置文件,并添加如下代码:

from distutils.core import setup
import py2exe

setup(console=["get_pdf_page.py"])

然后,在终端中运行以下命令:

python setup.py py2exe

这将在dist文件夹中生成一个可执行文件。

使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果看完觉得有收获,欢迎点赞、评论、分享支持一下。你的支持和肯定,是我坚持写作的动力~

最后可以关注我@零度杂谈。欢迎点此扫码关注交流,共同进步~

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝对零度HCL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值