python 统计pdf页数

news/2024/11/17 3:26:34/

python 统计pdf页数
import os
import PyPDF2
import sys, jm, traceback
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets
def get_all_file_by_type(path, type=(), get_all_dirs = True): # 获得以type类型结尾的所有文件,返回一个list

filelist = []for a, b, c in os.walk(path):for name in c:fname = os.path.join(a, name)if fname.endswith(type):filelist.append(fname)if not get_all_dirs:        # 仅在当前目录查找文件print("跳出循环")break
print("总共有%d个文件"%filelist.__len__())
return filelist

def output_log(outpath, message):
with open(outpath, ‘a’) as f:
f.write(message)

def compute_pdfpage(path_bc, path, get_all_dirs = False):
counts = 0
type = (“PDF”,“pdf”)
file_list = get_all_file_by_type(path=path, type=type, get_all_dirs = get_all_dirs)
jd_pj = 100 / len(file_list)
jd = 100 / len(file_list)
for pdf in file_list:
try:
reader = PyPDF2.PdfFileReader(pdf)
# 不解密可能会报错:PyPDF2.utils.PdfReadError: File has not been decrypted
if reader.isEncrypted:
reader.decrypt(‘’)
page_num = reader.getNumPages()
print(pdf, page_num)
counts += page_num
output_log(path_bc, ‘%s %s\n’%(pdf, page_num))
self.textEdit.append(‘%s %s’%(pdf, page_num))
except Exception as e:
print(“-”*70)
print(pdf + “该文件出现异常,可能是权限问题”)
print(e)
print(“-”*70)
self.textEdit.append(pdf + “该文件出现异常,可能是权限问题”)
self.progressBar.setProperty(“value”, jd)
QApplication.processEvents()
jd = jd + jd_pj
os.startfile(path_bc)
return counts

def main(self):
def askdirectory_pdfhb_xz():
“”“”“”
_translate = QtCore.QCoreApplication.translate
folder = QFileDialog.getExistingDirectory()
self.lineEdit.setText(_translate(“Form”, folder))
def askdirectory_pdfhb_xz1():
“”“”“”
_translate = QtCore.QCoreApplication.translate
folder = QFileDialog.getExistingDirectory()
self.lineEdit_2.setText(_translate(“Form”, os.path.join(folder, ‘统计表.txt’)))
def ye_main():
try:
path = self.lineEdit.text()
path_bc = self.lineEdit_2.text()
counts = compute_pdfpage(path_bc, path, get_all_dirs=True)
print(“总共%d页” % counts)
except:
self.textEdit.append(‘出错了\n%s’ % traceback.format_exc())
self.pushButton.clicked.connect(ye_main)
self.toolButton.clicked.connect(askdirectory_pdfhb_xz)
self.toolButton_2.clicked.connect(askdirectory_pdfhb_xz1)

if name == ‘main’:
if name == ‘main’:
app = QApplication(sys.argv)
MainWindow = QMainWindow() # QMainWindow模块名
self = jm.Ui_MainWindow()
self.setupUi(MainWindow)
main(self)

    MainWindow.show()sys.exit(app.exec_())

http://www.ppmy.cn/news/60049.html

相关文章

【华为OD机试 2023最新 】统一限载货物数最小值(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析代码思路C语言题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车)。 货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依…

【网络安全】记一次杀猪盘渗透实战

看起来非常假的网站,这个网站是没有 cdn 的用的是 thinkphpk 框架搭建的。 先打一波 poc 没有效果 访问一下后台直接在 url 后面加/admin。 一个开源的 cms 还没有验证码尝试用 burp 进行爆破,首先在火狐上设置代理 ip 为 127.0.0.1 代理端口为 8081。 B…

1、Flutter使用总结(RichText、Container)

1、创建Flutter项目 flutter create DemoName 2、运行项目 flutter run -d ‘iPhone 14 Pro Max’ 注: 当运用Android Studio时、选择安卓模拟器运行项目、如果项目路径有中文名称: 那么运行报错、如果直接在项目路径下,采用终端运行安卓模拟器、可执行如下命令 flutter ru…

【JavaEE进阶】——第五节.SpringMVC学习介绍(上)(获取参数,传递参数——关于前后端传参交互的总结、from表单、Ajax数据提交)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 目录 文章目…

车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目

hi,粉丝朋友们: 背景及成果展示 本节带大家来开始学习多屏幕互动的动画版本设计,回忆一下我们已经在之前blog和wms课程中学习了多屏互动的非动画版本如下: 再来看看今天我们想要实现有动画版本的成果: 是不是相比之…

下一代大数据分布式存储技术Apache Ozone初步研究

文章目录 概述定义特性架构总体架构写数据读数据 部署安装方式安装Docker启动Docker-compose启动企业预置型(On Premise)安装 实践命令行接口Ofs (Hadoop兼容)Recon API 概述 定义 Apache Ozone 官网地址 https://ozone.apache.org/ 最新版本1.3.0 Apache Ozone 官网最新文档地…

Java ---比较器

我们知道基本数据类型的数据(除 boolean 类型外)需要比较大小的话,之间使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢? 在 Java 中经常会涉及到对象…

「业务架构」波特的五力分析教程介绍

波特五力分析模型最早出现在哈佛商学院教授迈克尔E波特1979年发表在《哈佛商业评论》上的文章中。这篇论文的发表在历史上改变了企业、组织甚至国家对战略的理解。自《哈佛商业评论》创刊以来,它被评为十大最具影响力的论文之一。 五力分析可以帮助公司评估行业吸引…