Python利用PyPDF2库获取PDF文件总页码实例


Posted in Python onApril 03, 2020

Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去:

1、首先,要安装PyPDF2库,利用以下命令即可:

pip install PyPDF2

2、接着,就是直接编写代码了,其中我新建了一个py文件,名为file_utils.py,代码如下:

from PyPDF2 import PdfFileReader
 
def get_num_pages(file_path):
 """
 获取文件总页码
 :param file_path: 文件路径
 :return:
 """
 reader = PdfFileReader(file_path)
 # 不解密可能会报错:PyPDF2.utils.PdfReadError: File has not been decrypted
 if reader.isEncrypted:
  reader.decrypt('')
 page_num = reader.getNumPages()
 return page_num

3、这样就可以获得该pdf文件的总页数了,但是需要传递文件路径进去,因为需要读取这个文件。

4、以上内容仅供学习参考,谢谢!

补充知识:使用python合并pdf文件带书签

1、需求:

将几本纸质书进行了扫描,可是扫描的每页生成一个pdf文件。需要怎么才能把这些pdf文件合成一个呢?adoba acrobat工具支持,可是收费。我们平时用的都是adoba reader,只有读pdf的功能没有合并等高级功能。网上的一些免费工具又担心有病毒或绑定程序。

所以考虑看看pyton实现。网上找了下python合并pdf的脚本,发现也没有添加书签的功能的,有添加书签的也不是很灵活。

所有对网上找的一个python程序进行了升级,可以实现合并pdf并每个章节加入书签。

文件准备:

先将扫描的pdf文件,每一章放到一个文件夹中,文件夹名字用章节名命名。这样最终程序就能将章节名作为书签了,而不是默认将每页都生成书签。

Python利用PyPDF2库获取PDF文件总页码实例

2、程序代码

代码运行环境:python3

需要安装PyPDF2包:pip install PyPDF2

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
 本脚本用来合并pdf文件,支持带一级子目录的
 每章内容分别放在不同的目录下,目录名为章节名
 最终生成的pdf,按章节名生成书签
'''

import os, sys, codecs
from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger
import glob

def getFileName(filepath):
 '''
  获取当前目录下的所有pdf文件
 '''
 file_list = glob.glob(filepath+"/*.pdf")
 # 默认安装字典序排序,也可以安装自定义的方式排序
 # file_list.sort()
 return file_list


def get_dirs(filepath='', dirlist_out=[], dirpathlist_out=[]):
 # 遍历filepath下的所有目录
 for dir in os.listdir(filepath):
  dirpathlist_out.append(filepath + '\\' + dir)

 return dirpathlist_out


def merge_childdir_files(path):
 '''
  每个子目录下合并生成一个pdf
 '''
 dirpathlist = get_dirs(path)
 if len(dirpathlist) == 0:
  print("当前目录不存在子目录")
  sys.exit()
 for dir in dirpathlist:
  mergefiles(dir, dir)


def mergefiles(path, output_filename, import_bookmarks=False):
 # 遍历目录下的所有pdf将其合并输出到一个pdf文件中,输出的pdf文件默认带书签,书签名为之前的文件名
 # 默认情况下原始文件的书签不会导入,使用import_bookmarks=True可以将原文件所带的书签也导入到输出的pdf文件中
 merger = PdfFileMerger()
 filelist = getFileName(path)
 if len(filelist) == 0:
  print("当前目录及子目录下不存在pdf文件")
  sys.exit()
 for filename in filelist:
  f = codecs.open(filename, 'rb')
  file_rd = PdfFileReader(f)
  short_filename = os.path.basename(os.path.splitext(filename)[0])
  if file_rd.isEncrypted == True:
   print('不支持的加密文件:%s'%(filename))
   continue
  merger.append(file_rd, bookmark=short_filename, import_bookmarks=import_bookmarks)
  print('合并文件:%s'%(filename))
  f.close()
 # out_filename = os.path.join(os.path.abspath(path), output_filename)
 merger.write(output_filename + ".pdf")
 print('合并后的输出文件:%s'%(output_filename))
 merger.close()

if __name__ == "__main__":
 # 每个章节一个子目录,先分别合并每个子目录文件为一个pdf,然后再将这些pdf合并为一个大的pdf,这样做目的是想生成每个章节的书签

 # 1.指定目录
 # 原始pdf所在目录
 path = "D:\spdf"
 # 输出pdf路径和文件名
 output_filename = "D:\spdf\战略规划 公司实现持续成功的方法、工具和实践 罗熙昶 2018-09"

 # 2.生成子目录的pdf
 # merge_childdir_files(path)

 # 3.子目录pdf合并为总的pdf
 mergefiles(path, output_filename)

3、程序使用

将要生成的pdf文件目录导入到程序指定目录下,例如我程序中的path是“D:\spdf”,然后指定最终输出的文件路径及文件名,我上面的output_filename是"D:\spdf\战略规划 公司实现持续成功的方法、工具和实践 罗熙昶 2018-09"

数据结果如下:

Python利用PyPDF2库获取PDF文件总页码实例

以上这篇Python利用PyPDF2库获取PDF文件总页码实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
初学Python实用技巧两则
Aug 29 Python
Python函数参数类型*、**的区别
Apr 11 Python
python实现超市扫码仪计费
May 30 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
python flask解析json数据不完整的解决方法
May 26 Python
python获取txt文件词向量过程详解
Jul 05 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Python图像处理之图像拼接
Apr 28 Python
python 算法题——快乐数的多种解法
May 27 Python
python中的getter与setter你了解吗
Mar 24 Python
Numpy 理解ndarray对象的示例代码
Apr 03 #Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 #Python
Django自定义列表 models字段显示方式
Apr 03 #Python
使用Django清空数据库并重新生成
Apr 03 #Python
Python基础类继承重写实现原理解析
Apr 03 #Python
Django实现列表页商品数据返回教程
Apr 03 #Python
Python第三方库的几种安装方式(小结)
Apr 03 #Python
You might like
Terran热键控制
2020/03/14 星际争霸
php程序效率优化的一些策略小结
2010/07/17 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python的sorted用法详解
2019/06/25 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
大学生秋游活动方案
2014/02/17 职场文书
2014年图书室工作总结
2014/12/09 职场文书
小学老师对学生的评语
2014/12/29 职场文书
辞职信怎么写
2015/02/27 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android