使用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
    评论
大数据基础知识入门 社会保障事业部 张火磊 主要内容 大数据价值 03 大数据概念、特性、由来 01 大数据应用举例 04 02 Hadoop技术介绍 大数据概念、特性、由来 什么叫大数据? 麦肯锡全球研究所给出的定义是:一 种规模大到在获取、存储、管理、分 析方面大大超出了传统数据库软件工 具能力范围的数据集合,具有海量的 数据规模、快速的数据流转、多样的 数据类型和价值密度低四大特征。 大数据的特性 大量(Volume) 多样(Variety) 快速(Velocity) 价值(Value) 大数据技术的由来 自 2002 年 数 字 时 代 开 启 以 来,数据呈现海量增长趋势(如图 所示)。特别是在2004年社交媒体 产生后,数据更是呈现爆炸性增 长趋势. 随着数据的增长,尤其数据 达到PB级以后,数据的存储和分 析都会变得非常困难。 2003-2006年,Google提出了三大关键技术来解决大规模数据的存 储和处理: GFS、MapReduce、BigTable并称Google大数据的三驾马 车。虽然Google没有公布这三个产品的源码,但是他发布了这三个 产品的详细设计论文,奠定了风靡全球的大数据的基础! Hadoop之父Doug Cutting 受此启发的Doug Cutting等人用2 年的业余时间实现了GFS和MapReduce机制。 2005年,Hadoop作为Lucene的子项目Nutch 的一部分正式引入Apache基金会。2006年2 月被分离出来,成为一套完整独立的软件, 起名为Hadoop。 Hadoop的起源 总结起来,Hadoop起源于Google的三大论文 GFS—->HDFS Google MapReduce—->Hadoop MapReduce BigTable—->HBase Hadoop技术介绍 Hadoop的架构 Cloudera Manger Ambari 和 Cloudera Manger都是基于Web的工具,支持 Apache Hadoop集群的供应、管理 和 监 控 。 支 持 大 多 数 Hadoop 组 件 , 包 括 HDFS 、 MapReduce 、 Spark 、 Hive 、 Pig 、 Hbase 、 Zookeper、Sqoop等 大数据集群管理方式 分 为 手 工 方 式 ( Apache hadoop)和工具方式(Ambari + hdp 和 Cloudera Manger + CDH) HDFS HDFS ( Hadoop Distributed File System ) 是 Hadoop项目的核心组件之一,是分布式计算数据存储 管理的基础,是基于流数据模式访问和处理超大文件的 需求而开发的,可以运行于廉价的商用服务器上。它所 具有的高容错、高可靠性、高可扩展性、高吞吐率等特 征为海量数据提供了不怕故障的存储,为超大数据集的 应用处理带来了很多便利。主要包含NameNode(用来管理 文件系统的命名空间)和DataNode(文件系统真正存储 数据的地方) MapReduce MapReduce是一个高性能的批处理分布式 计算框架,用于对海量数据进行并行分析和处 理。MapReduce采用"分而治之"的思想,把对大 规模数据集的操作,分发给一个主节点管理下 的各个分节点共同完成,然后通过整合各个节 点的间结果,得到最终结果。简单地说, MapReduce就是"任务的分解与结果的汇总"。 举例:如果想统计下过去10年计算机论文出现 最多的几个单词 传统方法:首先写一个遍历论文的程序,部署 到N台机器上去,然后把论文集分成N份,一台 机器跑一个作业。这个方法从理论上可以实 现,但是部署起来很麻烦,我们要人工把程序 copy到别的机器,要人工把论文集分开,最后 还要把N个运行结果进行整合。 Spark Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。 Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题。 Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数 据集操作类型,编程模型比Hadoop MapReduce更灵活。 Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制,因此 Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 Spark 优点: 运行速度快:使用DAG执行引擎以支持循环数据流与内存计算 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell 进行交互式编程 通用性:Spark提供了完整而强大的技术

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绝对零度HCL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值