python批量处理修改pdf内容

 

  1. 将PDF转换为Word:

    • 使用pdf2docx库中的Converter类来进行PDF转换。
    • convert_pdf_to_docx函数接受PDF文件路径和输出的Word文档路径作为参数。
    • 通过调用Converter对象的convert方法将PDF转换为Docx格式。
    • 最后调用close方法关闭Converter对象并保存转换后的文档。
  2. 将Word转换为Excel:

    • 使用docx库打开Word文档。
    • 创建一个新的Excel文件。
    • 遍历Word文档中的表格,逐行读取表格内容,并将其写入Excel文件。
    • 使用openpyxl库保存Excel文件。
  3. 替换Excel中的数据:

    • 使用openpyxl库加载输入的Excel文件。
    • 获取原始数据,并复制一份用于替换。
    • 遍历替换数据的范围,更新特定位置的数据。
    • 创建新的Excel文件,更新数据并保存。
  4. 将Excel转换为Word:

    • 遍历输入文件夹下的所有Excel文件。
    • 为每个Excel文件创建一个新的Word文档。
    • 打开Excel文件并获取活动工作表。
    • 在Word文档中创建一个表格,并将Excel单元格数据写入表格。
    • 调整表格样式和单元格样式,并保存Word文档。
  5. 将Word转换为PDF:

    • 使用docx2pdf库的convert函数将Word文档转换为PDF。
    • 遍历输入文件夹下的所有Word文件,并将其转换为PDF格式。
  6. 流程步骤

 ①初始pdf

 ②变成word

③变成excel

④批量处理更换

⑤转成word

⑥转成pdf

#pdf 转 word
from pdf2docx import Converter

def convert_pdf_to_docx(pdf_path, docx_path):
    cv = Converter(pdf_path)
    cv.convert(docx_path, start=0, end=None)
    cv.close()

if __name__ == '__main__':
    pdf_path = 'C:/Users/wangkejun/Desktop/1/结果1.pdf'  # 输入的 PDF 文件路径
    docx_path = 'C:/Users/wangkejun/Desktop/1/结果2.docx' # 输出的 Word 文档路径
    convert_pdf_to_docx(pdf_path, docx_path)
    print('转换完成!')


# word 转 excel
import docx
from openpyxl import Workbook

# 打开 Word 文档
doc = docx.Document(r'C:/Users/wangkejun/Desktop/1/结果2.docx')

# 创建一个新的 Excel 文件
workbook = Workbook()
sheet = workbook.active

# 遍历 Word 文档中的表格
for table in doc.tables:
    for row in table.rows:
        # 按行遍历表格并将内容写入 Excel 文件
        data = []
        for cell in row.cells:
            data.append(cell.text)
        sheet.append(data)

# 保存 Excel 文件
workbook.save(r'C:/Users/wangkejun/Desktop/1/结果3.xlsx')

import os
from openpyxl import load_workbook

def replace_data_in_excel(input_file, output_folder):
    # 加载输入的 Excel 表
    wb = load_workbook(input_file)
    sheet = wb.active
    
    # 获取原始数据
    data = []
    for row in sheet.iter_rows(values_only=True):
        data.append(list(row))
    
    # 替换数据
    for i in range(1, 39):
        # 复制原始数据
        new_data = [row[:] for row in data]
        # 替换特定位置的数据
        new_data[1][1] = f"{i}/38"
        
        # 创建新的 Excel 表
        new_wb = load_workbook(input_file)
        new_sheet = new_wb.active
        
        # 更新新的 Excel 表的数据
        new_sheet.delete_rows(1, new_sheet.max_row)
        for row in new_data:
            new_sheet.append(row)
        
        # 保存新的 Excel 表
        output_file = os.path.join(output_folder, f"{i}.xlsx")
        new_wb.save(output_file)
    
    print("生成完成!")

if __name__ == '__main__':
    input_file = r'C:/Users/wangkejun/Desktop/1/结果3.xlsx'  # 输入的 Excel 表路径
    output_folder = r'C:/Users/wangkejun/Desktop/1'  # 输出的文件夹路径
    
    replace_data_in_excel(input_file, output_folder)

#excel 转 word
import os
import openpyxl
from docx import Document
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT, WD_ALIGN_VERTICAL

def convert_excel_to_word(input_folder, output_folder):
    # 遍历输入文件夹下的所有 Excel 文件
    for file_name in os.listdir(input_folder):
        if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
            # 构造输出文件路径
            output_file = os.path.join(output_folder, f"{file_name.split('.')[0]}.docx")
            
            # 创建一个新的 Word 文档
            doc = Document()
            
            # 打开 Excel 文件
            file_path = os.path.join(input_folder, file_name)
            workbook = openpyxl.load_workbook(file_path)
            sheet = workbook.active
            
            # 在 Word 文档中创建一个表格
            table = doc.add_table(rows=1, cols=sheet.max_column)
            table.autofit = False
            
            # 设置表格样式
            table.style = 'Table Grid'
            
            # 将 Excel 单元格数据写入 Word 表格
            for row in sheet.iter_rows(values_only=True):
                new_row = table.add_row().cells
                for i, cell_value in enumerate(row):
                    new_row[i].text = str(cell_value)
            
            # 调整单元格样式
            for row in table.rows:
                for cell in row.cells:
                    cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
                    cell.paragraphs[0].paragraph_format.alignment = WD_ALIGN_VERTICAL.CENTER
            
            # 保存 Word 文档
            doc.save(output_file)
    
    print("转换完成!")

if __name__ == '__main__':
    input_folder = r'C:/Users/wangkejun/Desktop/1/excel'  # 输入的文件夹路径
    output_folder = r'C:/Users/wangkejun/Desktop/1/word'  # 输出的 Word 文件夹路径
    
    convert_excel_to_word(input_folder, output_folder)


# #word 转 pdf
from docx2pdf import convert
import os

def batch_word_to_pdf(input_folder, output_folder):
    # 遍历输入文件夹下的所有 Word 文件
    for file_name in os.listdir(input_folder):
        if file_name.endswith('.docx'):
            # 构造输出文件路径
            output_file = os.path.join(output_folder, f"{file_name.split('.')[0]}.pdf")
            
            # 调用 docx2pdf 库的 convert 函数将 Word 文档转换为 PDF
            convert(os.path.join(input_folder, file_name), output_file)
    
    print("转换完成!")

if __name__ == '__main__':
    input_folder = r'C:/Users/wangkejun/Desktop/1/word'  # 输入的文件夹路径
    output_folder = r'C:/Users/wangkejun/Desktop/1/pdf'  # 输出的 PDF 文件夹路径
    
    batch_word_to_pdf(input_folder, output_folder)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT下载、安装详细教程[Qt5.15及Qt6在线安装,附带下载链接]

QT5.15及QT6的下载和安装 1.下载1.1官网下载1.2国内镜像网站下载 2.安装3.软件启动及测试程序运行3.1Qt Creator(Community) 1.下载 QT自Qt5.15版本后不在支持离线安装包下载(非商业版本,开源),故Qt5.15及Qt6需要使用在线安装程序…

Zephyr 源码调试

背景 调试环境对于学习源码非常重要,但嵌入式系统的调试环境搭建稍微有点复杂,需要的条件略多。本文章介绍如何在 Zephyr 提供的 qemu 上调试 Zephyr 源码,为后续分析 Zephyr OS 相关原理做铺垫。 环境 我的开发环境为 wsl ubuntu&#xf…

使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

原理 LlamaIndex的文档链接:Using LLMs - LlamaIndex 🦙 0.9.33 LlamaIndex 的一般使用模式如下: 加载文档(手动或通过数据加载器)将文档解析为节点构建索引(来自节点或文档)(可选,高级&…

Java内存模型

主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量包括实例变量、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为局部变…

GreptimeAI + Xinference 联合方案:高效部署并监控你的 LLM 应用

随着人工智能技术的迅速进步,OpenAI 已经崭露头角,成为该领域的领军者之一。它在多种语言处理任务上表现卓越,包括机器翻译、文本分类和文本生成等方面。随着 OpenAI 的兴起,同时涌现的还有许多其他优质的开源大语言模型&#xff…

函数递归(Recursion)一篇便懂

递归的概念 在 C 语言中,递归(Recursion)是一种函数调用自身的编程技术。当一个函数在其定义中调用自身时,就称为递归函数。 了解递归思想 把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解…

OpenAI Altman曝光GPT-5后,你对未来大模型有什么期待?

最近OpenAI首席执行官 Sam Altman 在达沃斯论坛接受媒体采访时表示,他现在的首要任务就是推出下一代大模型,这款模型可能被称为GPT-5,与现有模型相比,GPT-5 “能做更多、更多的事情”。 Altman认为GPT-5仍处于早期阶段&#xff0…

运维神器Ansible的常用模块

引言:话不多说,今天分享一下Ansible的常用模块,建议收藏哦 1、ping模块 ping模块可以进行主机连通性测试 命令格式 ansible 主机或主机组 -m ping 例,成功显示如下: 2、command 模块 command模块可以直接在远程主机…

java并发面试题

目录 一.线程基础 1.线程和进程的区别 2.并行和并发的区别 3.创建线程的方式 4.线程包括哪些状态,状态之间如何变化 5.如何保证线程间按顺序执行 6.notify()和notifyAll()的区别 7.java中wait和sleep方法的区别 8.如何停止正在运行的线程 二.线程安全 1.synchronized…

springboot121编程训练系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的编程训练系统设计与实现 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四…

liunx服务异常分析

systemd-journald 服务分析系统日志 实验环境:本地 Centos 7 请勿在 vps 服务器上操作!!! 1 systemd-journald 介绍 systemd-journald 是一个收集并存储各类日志数据的系统服务。 它创建并维护一个带有索引的、 结构化的日志数据…

浅谈WPF之UI布局

一个成功的软件,离不开人性化的UI设计,如何抓住用户第一视觉,让用户产生依赖感,合适优雅的布局必不可少。本文以一些简单的小例子,简述WPF中布局 面板 控件的使用,仅供学习分享使用,如有不足之处…

学习笔记-李沐动手学深度学习(二)(08-09、线性回归、优化算法、Softmax回归、损失函数、图片分类)

总结 以_结尾的方法,好像是原位替换(即 原地修改,就地修改变量)如 fill_() 感恩的心:(沐神的直播环境) 08-线性回归基础优化算法 引言(如何在美国买房) 根据现在行…

51单片机ESP8266

一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具: 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试,选择这个不可以…

LeetCode刷题---删除排序链表中的重复元素 II

解题思路: 1.首先定义虚拟节点dummy,dummy的下一个节点指向head节点。 2.定义辅助节点cur指向dummy节点 3.开始遍历链表,如果当前节点cur的下一个节点和下下一个节点都不为空的情况下,对cur的下一个节点和下下一个节点的值进行判断。 4.如果当前节点cur的…

Python基础第九篇(Python可视化的开发)

文章目录 一、json数据格式(1).转换案例代码(2).读出结果 二、pyecharts模块介绍三、pyecharts模块入门(1).pyecharts模块安装(2).pyecharts模块操作(1).代码…

洛谷刷题-【入门2】分支结构

目录 1.苹果和虫子 题目描述 输入格式 输出格式 输入输出样例 2.数的性质 题目描述 输入格式 输出格式 输入输出样例 3.闰年判断 题目描述 输入格式 输出格式 输入输出样例 4.apples 题目描述 输入格式 输出格式 输入输出样例 5.洛谷团队系统 题目描述 …

什么是信号抖动

对于抖动,有一个简单而直观的定义: “Jitter is defined as the short-term variations of a digital signal’s significant instants from their ideal positions in time.” 翻译过来,就是: “抖动被定义为一个数字信号的重要时…

Duplicate keys detected: ‘41172‘. This may cause an update error.

在写项目的过程中,遇到了 Duplicate keys detected: 41172. This may cause an update error. 这个错误具体错误信息如下: 原因:v-for 循环时,用了重复的key值 解决方案: 1、单个v-for循环,选择id或其他唯一…

【C++杂货铺】快速学会命名空间

目录 🌈前言 📁 命名空间的定义 📁 命名空间的使用 ● 加命名空间名称及作用域限定符 ● 使用using将命名空间中某个成员引入 ● 使用using namespace 命名空间名称 引入 📁 C输入 和 输出 📁 总结 &#x1f3…