Python实现批量word文档转pdf并统计其页码

 更新时间:2023年05月29日 11:59:44   作者:逃逸的卡路里  
pypdf2是一个Python模块,可以用来读取、写入和操作PDF文件,本文就将利用该模块实现批量word文档转pdf并统计其页码,需要的小伙伴可以了解一下

pypdf2是一个Python模块,可以用来读取、写入和操作PDF文件。要安装pypdf2模块,请按照以下步骤操作:

确保你已经安装了Python。你可以在终端或命令提示符中输入python --version来检查Python是否已安装。

pypdf2模块的安装:

ModuleNotFoundError: No module named ‘PyPDF2’

安装完成后,你可以在Python中使用pypdf2模块来读取、写入和操作PDF文件。

例如,要读取一个PDF文件中的文本内容,你可以在Python脚本中导入pypdf2模块,然后使用PdfFileReader类读取文件并遍历每个页面。下面是一个简单的示例代码:

import pypdf2  
  
pdf_file = pypdf2.PdfFileReader('example.pdf')  
for page_num in range(pdf_file.getNumPages()):  
    page = pdf_file.getPage(page_num)  
    print(page.extractText())

这将打印出PDF文件中的每个页面的文本内容。

注意:

因PyPDF2 版本更新原因,一些类和函数已经过时,想要采用替代函数,例如获取pdf 页数 getNumPages 替换为直接使用 len(reader.pages)。

下面是两个报错的提示,把函数替换掉就行

PyPDF2.errors.DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.

PyPDF2.errors.DeprecationError: reader.getNumPages is deprecated and was removed in PyPDF2 3.0.0. Use len(reader.pages) instead.

利用Python代码实现批量word文档转换成PDF格式

并对转换的文档,进行页码统计,如下(代码示例)

# -*- coding:utf-8 -*-
import os  # 导入系统功能模块
from win32com.client import Dispatch, DispatchEx  # 导入pywin32模块的client包下的函数
from win32com.client import constants  #  导入pywin32模块的client包下的保存COM常量的类
from win32com.client import gencache    #  导入pywin32模块的client包下的gencache函数
from PyPDF2 import  PdfReader  # 获取页码用
import re  # 导入正则表达式模块

import pythoncom  # 导入封装了OLE自动化API的模块,该模块为pywin32的子模块


'''获取指定目录下的文件
   filepath:要遍历的目录
   filelist_out:输出文件列表
   file_ext:文件的扩展名,默认为任何类型的文件
'''
def getfilenames(filepath='',filelist_out=[],file_ext='all'):
    # 遍历filepath下的所有文件,包括子目录下的文件
    for fpath, dirs, fs in os.walk(filepath):
        for f in fs:
            fi_d = os.path.join(fpath, f)
            if file_ext == '.doc':  # 遍历Word文档文件
                if os.path.splitext(fi_d)[1] in ['.doc','.docx']:   # 判断是否为Word文件
                    filelist_out.append(re.sub(r'\\','/',fi_d))  # 添加到路径列表中
            else:
                if  file_ext == 'all':  # 要获取所有文件的情况
                    filelist_out.append(fi_d)  # 将文件路径添加到路径列表中
                elif os.path.splitext(fi_d)[1] == file_ext:  # 要获取除了Wrod文件以外的文件
                    filelist_out.append(fi_d)  # 将文件路径添加到路径列表中
                else:
                    pass
        filelist_out.sort()  # 对路径进行排序
    return filelist_out  # 返回文件完整路径列表

# Word转换为PDF(多个文件)
def wordtopdf(filelist,targetpath):
    totalPages = 0   # 记录总页码
    valueList = []
    try:
        pythoncom.CoInitialize()   # 调用线程初始化COM库,解决调用Word 2007时出现“尚未调用CoInitialize”错误的问题
        gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
        # 开始转换
        w = Dispatch("Word.Application")
        for fullfilename in filelist:
            (filepath,filename) = os.path.split(fullfilename)  # 分割文件路径和文件名,其中,filepath表示文件路径;filename表示文件名
            softfilename = os.path.splitext(filename)  # 分割文件名和扩展名
            os.chdir(filepath)  
            doc = os.path.abspath(filename)
            os.chdir(targetpath)
            pdfname = softfilename[0] + ".pdf"
            output = os.path.abspath(pdfname)
            pdf_name = output

            # 文档路径需要为绝对路径,因为Word启动后当前路径不是调用脚本时的当前路径。
            try: # 捕捉异常
                doc = w.Documents.Open(doc, ReadOnly=1)
                doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF, \
                                        Item=constants.wdExportDocumentWithMarkup,
                                        CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
            except Exception as e: # 处理异常
                print(e)
            if os.path.isfile(pdf_name): # 判断文件是否存在
                # 获取页码
                pages = getPdfPageNum(pdf_name)   # 获取页码
                valueList.append([fullfilename,str(pages)])
                totalPages += pages  # 累加页码
                # os.remove(pdf_name)  # 删除生成的PDF文件
            else:
                print('转换失败!')
                return False
        w.Quit(constants.wdDoNotSaveChanges) # 退出Word应用程序
        return totalPages,valueList  # 返回总页码和每个文档的页码
    except TypeError as e:
        print('出错了!')
        print(e)
        return False
'''
功能:统计文档页码
path:文件绝对路径
'''
def getPdfPageNum(path):
    with open(path, "rb") as file:
        doc = PdfReader(file)
        pagecount = len(doc.pages)
    return pagecount

if __name__ == '__main__':
    sourcepath = r"C:/Users/Lenovo/Desktop/python代码示例/word/"  # 指定源路径(Word文档所在路径)
    targetpath = r"C:/Users/Lenovo/Desktop/python代码示例/pdf/"  # 指定目标路径(PDF保存路径)
    filelist = getfilenames(sourcepath,[],'.doc')  # 获取Word文档路径
    valueList = wordtopdf(filelist,targetpath)  # 实现将Word文档批量转换为PDF
    resultList = valueList[1]  # 获取统计结果
    if valueList:
        for i in resultList:
            print(i[0],i[1])
        totalPages = str(valueList[0]) # 总页数
        print("合计页数:",totalPages)
    else:
        print("没有要统计的文件或者统计失败!")

以上就是Python实现批量word文档转pdf并统计其页码的详细内容,更多关于Python word转pdf的资料请关注脚本之家其它相关文章!

相关文章

  • Flask模拟实现CSRF攻击的方法

    Flask模拟实现CSRF攻击的方法

    这篇文章主要介绍了Flask模拟实现CSRF攻击的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Jupyter安装拓展nbextensions及解决官网下载慢的问题

    Jupyter安装拓展nbextensions及解决官网下载慢的问题

    这篇文章主要介绍了Jupyter安装拓展nbextensions及解决官网下载慢的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python实现的银行系统模拟程序完整案例

    Python实现的银行系统模拟程序完整案例

    这篇文章主要介绍了Python实现的银行系统模拟程序,结合完整实例形式分析了Python基于面向对象程序设计模拟的银行系统登录验证、开户、找回密码、挂失、查询、存取款、转账等功能相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • Python datetime包函数简单介绍

    Python datetime包函数简单介绍

    这篇文章主要介绍了Python datetime包函数简单介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python for和else语句趣谈

    python for和else语句趣谈

    这篇文章主要介绍了python for和else语句趣谈,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 一文全面详解Python变量作用域

    一文全面详解Python变量作用域

    变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友可以参考下
    2025-06-06
  • Python Django教程之实现待办事项应用程序

    Python Django教程之实现待办事项应用程序

    Django是一个基于Python Web框架的高级Web框架,允许快速开发和干净,务实的设计。本文将创建一个待办事项应用程序,以了解Django的基础知识,感兴趣的可以尝试一下
    2022-10-10
  • Python随机验证码生成和join 字符串的问题解析

    Python随机验证码生成和join 字符串的问题解析

    Python中有join()和os.path.join()两个函数,join是将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串而os.path.join(): 将多个路径组合后返回,本文给大家介绍的非常详细,需要的朋友一起看看吧
    2022-04-04
  • Python 数字转化成列表详情

    Python 数字转化成列表详情

    这篇文章主要介绍了Python 数字转化成列表,主要以代码实现了将输入的数字转化成一个列表,输入数字中的每一位按照从左到右的顺序成为列表中的一项。,需要的朋友可以参考下
    2021-11-11
  • NetWorkX使用方法及nx.draw()相关参数解读

    NetWorkX使用方法及nx.draw()相关参数解读

    这篇文章主要介绍了NetWorkX使用方法及nx.draw()相关参数解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论