【办公类-21-11】 20240327三级育婴师 多个二级文件夹的docx合并成docx有页码,转PDF

背景展示:有页码的操作题

背景需求:

实操课终于全部结束了,把考试内容(docx)都写好了

【办公类-21-10】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体、去掉五分钟”-CSDN博客文章浏览阅读787次,点赞9次,收藏7次。【办公类-21-10】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体、去掉五分钟”https://blog.csdn.net/reasonsummer/article/details/137055848

最后所有docx需要合并在一起,便于打印,但是前期发现合并的PDF内没有页码,双面打印后没有页码不知道到底是第几题。

【办公类-21-08】三级育婴师 多个二级文件夹的docx合并成PDF-CSDN博客文章浏览阅读510次,点赞7次,收藏6次。【办公类-21-08】三级育婴师 多个二级文件夹的docx合并成PDFhttps://blog.csdn.net/reasonsummer/article/details/136460044?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136460044%22%2C%22source%22%3A%22reasonsummer%22%7D

需求:

1、将所有docx文件合并一个docx,

2、插入页码,并确保一个题目一页,

3、保存docx,转成PDF。

通过三天的AI问询,终于将这个需求实现了。

第1步:从二级文件里提取所有的蓝色字体docx,放到整理

代码

import os,time
import shutilprint('-----1、复制每个文件夹下的(没有5分钟字样的docx文件到二级文件夹“整理”里-------')# 一级文件夹路径
folder_path = r'D:\04三级操作题'
# 目标文件夹路径
new_path = folder_path+r'\整理'
os.makedirs(new_path, exist_ok=True)# 获取一级文件夹中的所有二级文件夹(包括整理文件夹)
subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]# 遍历二级文件夹并复制docx文件到目标文件夹复制到整理里面
for subfolder in subfolders:if subfolders=='整理':        # 排除“整理”文件夹passelse:docx_files = [f for f in os.listdir(subfolder) if f.endswith('.docx')]for file in docx_files:source_file = os.path.join(subfolder, file)destination_file = os.path.join(new_path, file)if source_file == destination_file:# 如果复制文件相同,就跳过                continueif '5分钟' in file:#             # 不要有5分钟文件名的docxpasselse:shutil.copy2(source_file, destination_file)

第2步:修改整理内docx的上下左右边距,页脚的边距

并且每段最后加一个下一页换页符(确保每个题目占满一面)

代码

print('-----2、把“整理”里面的所有docx打开,最后添加分节符、设置页眉页脚距离边距的大小(把页面撑到最大)------')
# 打开每个文件,添加一个分节符
from docx import Document
from docx.enum.section import WD_SECTION_START
from docx.shared import Cm# 遍历整理文件夹内的所有docx文件
for filename in os.listdir(new_path):if filename.endswith(".docx"):file_path = os.path.join(new_path, filename)# 打开docx文件doc = Document(file_path)# 设置页脚距离页面边界1厘米section = doc.sections[0]section.left_margin = Cm(1)section.right_margin = Cm(1)section.top_margin = Cm(1)section.bottom_margin = Cm(1)# 将页脚距离页面边界从1.75厘米改为1厘米section.footer_distance = Cm(1)# 添加一个新分节符doc.add_section(WD_SECTION_START.NEW_PAGE)        # 保存文档(覆盖原文件)doc.save(file_path)

边距修改后,可以写文字的部分变大了

第3步:读取一个有页码的模板,把“整理”内所有的docx文字复制到模板,并另存

print('-----3、读取一个带页码的模板,把整理里面的docx合并到这个模板里------')from docx import Document
from docx.enum.section import WD_SECTION_START
import os
from docx.shared import Cm# # 创建一个带页码的空Document对象,并把页眉页脚边距改小combined_doc = Document(folder_path+r'\页码.docx')# 读取“整理”里面的docx的内容
docx_files = []for file_name in os.listdir(new_path):if file_name.endswith(".docx"):docx_files.append(os.path.join(new_path, file_name))for file in docx_files:doc = Document(file)for element in doc.element.body:combined_doc.element.body.append(element)    out_file=folder_path+r'\教育参考题1-13.docx'
combined_doc.save(out_file)

已经实现了每题1-2面(分页符)

但是还有第1行和最后1行(模板自带的,这些空行回车需要删除)

第4步,删除docx的第一个和最后一个回车

print('-----4、把“合并docx"的第一段回车和最后一个回车删除。(页码模板自带)---')
doc = Document(out_file)
# 删除第1个和最后一个段落(都只有一个回车)
for i in [0,-1]:dell_paragraph = doc.paragraphs[i]doc._element.body.remove(dell_paragraph._element)
doc.save(out_file)

第5步,docx转PDF

print('-----5、把“合并docx"转为”合并PDF“---')
# from docx2pdf import convert
# # 转换123.docx为123.pdf
# convert(out_file, out_file[:4]+'.pdf')
# 用这个导致有些内容到下一页了。import comtypes.client,time# 启动Word应用程序
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(out_file)# pdf_file=out_file[:-4]+'pdf'# 将文档保存为PDF文件
doc.SaveAs(out_file[:-4]+'pdf', FileFormat=17)  # 17表示PDF格式
# r'D:\04三级操作题\教育参考题1-13.pdf'
time.sleep(2)
# 关闭Word应用程序
doc.Close()
word.Quit()print("转换完成!")

现在docx合并和PDF合并都有页码了

1、docx:便于日后的修改(内容补充)

2、PDF:便于双面打印(内容板式不变化)

全部代码展示:

'''
合并word,带页码(读取一个带页码的空模板),转出PDF
作者:阿夏(AI对话大师)
时间:2024年3月27日
'''import os,time
import shutilprint('-----1、复制每个文件夹下的(没有5分钟字样的docx文件到二级文件夹“整理”里-------')# 一级文件夹路径
folder_path = r'D:\04三级操作题'
# 目标文件夹路径
new_path = folder_path+r'\整理'
os.makedirs(new_path, exist_ok=True)# 获取一级文件夹中的所有二级文件夹(包括整理文件夹)
subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]# 遍历二级文件夹并复制docx文件到目标文件夹复制到整理里面
for subfolder in subfolders:if subfolders=='整理':        # 排除“整理”文件夹passelse:docx_files = [f for f in os.listdir(subfolder) if f.endswith('.docx')]for file in docx_files:source_file = os.path.join(subfolder, file)destination_file = os.path.join(new_path, file)if source_file == destination_file:# 如果复制文件相同,就跳过                continueif '5分钟' in file:#             # 不要有5分钟文件名的docxpasselse:shutil.copy2(source_file, destination_file)print('-----2、把“整理”里面的所有docx打开,最后添加分节符、设置页眉页脚距离边距的大小(把页面撑到最大)------')
# 打开每个文件,添加一个分节符
from docx import Document
from docx.enum.section import WD_SECTION_START
from docx.shared import Cm# 遍历整理文件夹内的所有docx文件
for filename in os.listdir(new_path):if filename.endswith(".docx"):file_path = os.path.join(new_path, filename)# 打开docx文件doc = Document(file_path)# 设置页脚距离页面边界1厘米section = doc.sections[0]section.left_margin = Cm(1)section.right_margin = Cm(1)section.top_margin = Cm(1)section.bottom_margin = Cm(1)# 将页脚距离页面边界从1.75厘米改为1厘米section.footer_distance = Cm(1)# 添加一个新分节符doc.add_section(WD_SECTION_START.NEW_PAGE)        # 保存文档(覆盖原文件)doc.save(file_path)print('-----3、读取一个带页码的模板,把整理里面的docx合并到这个模板里------')from docx import Document
from docx.enum.section import WD_SECTION_START
import os
from docx.shared import Cm# # 创建一个带页码的空Document对象,并把页眉页脚边距改小combined_doc = Document(folder_path+r'\页码.docx')# 读取“整理”里面的docx的内容
docx_files = []for file_name in os.listdir(new_path):if file_name.endswith(".docx"):docx_files.append(os.path.join(new_path, file_name))for file in docx_files:doc = Document(file)for element in doc.element.body:combined_doc.element.body.append(element)    out_file=folder_path+r'\教育参考题1-13.docx'
combined_doc.save(out_file)print('-----4、把“合并docx"的第一段回车和最后一个回车删除。(页码模板自带)---')
doc = Document(out_file)
# 删除第1个和最后一个段落(都只有一个回车)
for i in [0,-1]:dell_paragraph = doc.paragraphs[i]doc._element.body.remove(dell_paragraph._element)
doc.save(out_file)print('-----5、把“合并docx"转为”合并PDF“---')
# from docx2pdf import convert
# # 转换123.docx为123.pdf
# convert(out_file, out_file[:4]+'.pdf')
# 用这个导致有些内容到下一页了。import comtypes.client,time# 启动Word应用程序
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(out_file)# pdf_file=out_file[:-4]+'pdf'# 将文档保存为PDF文件
doc.SaveAs(out_file[:-4]+'pdf', FileFormat=17)  # 17表示PDF格式
# r'D:\04三级操作题\教育参考题1-13.pdf'
time.sleep(2)
# 关闭Word应用程序
doc.Close()
word.Quit()print("转换完成!")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库学习(四)mybatis

Mybatis Mybatis是一个基于数据持久层(DAO层)的一款框架,他能极大的简化Java中连接数据库,操作数据库也就是jdbc的操作。 在定义mybatis相关接口时,不需要定义实现类,因为在程序启动时,mybati…

docker启动rocketmq简洁教程

docker启动rocketmq 打开云服务器防火墙 配置外网访问创建容器外部存储文件:mkdir -p /root/rocketmq/data/namesrv/logs /root/rocketmq/data/namesrv/store /root/rocketmq/conf /root/rocketmq/data/broker/logs /root/rocketmq/data/broker/store进入到 /root/…

Python环境下一种新的类谱峭度算法的旋转机械故障诊断模型

谱峭度SK的本质是计算每根谱线峭度值的高阶统计量,谱峭度对信号中的瞬态冲击成分十分敏感,能有效的从含有背景噪声信号中识别瞬态冲击及其在频带中的分布。由于谱峭度的复杂性、缺少一个正式的定义和一个容易理解的计算过程使其在很长时间内都未能引入到…

Redis入门到实战-第六弹

Redis实战热身Lists篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息代理和流…

kubectl 启用shell自动补全功能

官网手册参考:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/ 系统:centos7 补全脚本依赖于工具 bash-completion, 所以要先安装它(可以用命令 type _init_completion 检查 bash-completion 是否已安装&a…

PTA布尔矩阵的奇偶性

一个布尔方阵具有奇偶均势特性,当且仅当每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性: ⎣⎡​1010​0011​1010​0011​⎦⎤​ 编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有…

2024年腾讯云优惠券领取教程及使用攻略分享

随着云计算技术的快速发展,腾讯云作为国内领先的云计算服务提供商,为企业和个人提供了丰富的云产品和服务。为了帮助大家更好地了解和使用腾讯云,本文将为大家详细介绍2024年腾讯云优惠券领取教程及使用攻略。 一、腾讯云优惠券介绍说明 腾讯…

linux性能调优汇总(一)cpu

目录 一、引言 二、CPU ------>2.1、/proc/cpuinfo ------>2.2、cpuid指令 ------>2.3、lscpu ------>2.4、turbostat ------>2.5、rdmsr ------>2.6、perf ------>2.7、top ------>2.8、ps ------>2.9、pidstat 查看每个进程CPU、内存、…

【CSP试题回顾】201812-1-小明上学(优化)

CSP-201812-1-小明上学 解题代码 #include <iostream> using namespace std;int r, y, g, n, k, t, sumTime;int main() {cin >> r >> y >> g >> n;for (size_t i 0; i < n; i){cin >> k >> t;if (k 0)sumTime t;else if(k1…

成都克鲁斯机器人电路板故障维修攻略,快来了解一下!

一、克鲁斯机器人电路板维修步骤 断开电源&#xff1a;在进行电路维修前&#xff0c;务必断开机器人的电源&#xff0c;确保安全。 拆卸电路板&#xff1a;根据电路图或维修手册&#xff0c;小心拆卸故障电路板。注意记录拆卸过程中的细节&#xff0c;以便后续重新安装。 更换损…

基于 VB6的猜拳游戏

基于 VB6的猜拳游戏 1 欢迎页的制作 welcomeFrom 添加一个定时器 代码如下&#xff1a; Private Sub Form_Load()定时器Timer1的时间间隔设置为1000毫秒Timer1.Interval 1000Timer1.Enabled TrueEnd SubPrivate Sub Timer1_Timer()关闭当前窗体Unload MeReadyFrom.Show…

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

内网exp对抗

内网工具对抗 首先&#xff0c;你需要分析&#xff1a; 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次&#xff0c;你需要考虑&#xff1a; 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

【Linux】详解进程终止进程等待

一、页表&&写时拷贝的进一步理解 页表中不仅仅只有虚拟地址到物理地址的映射&#xff0c;还包括了很多选项&#xff0c;其中就包括了映射条目的权限。当我们进程的代码和数据加载到内存并和进程地址空间建立映射关系时&#xff0c;如果数据的内容不允许被修改&#xff…

PTA------ 敲笨钟

字符串处理问题&#xff01;------->字符串处理相关操做 代码&#xff1a; #include <iostream> #include<algorithm> #include<cmath> #include<cstring> #include<set> #include<stack> #include<queue> #include<map>…

【Java.mysql】——数据删改(DU) 附加数据库约束

目录 &#x1f6a9;更新(Update) &#x1f6a9;删除&#xff08;Delete&#xff09; &#x1f6a9;数据库约束 &#x1f388;约束类型 ✅NULL约束 ✅NNIQUE 唯一约束 ✅DEFAULT&#xff1a;默认值约束 ✅PRIMARY KEY&#xff1a;主键约束 ✅FOREIGN KEY&#xff1a;外键…

什么是字典序?字典序详解

字典序&#xff0c;也称为词典序、字典顺序、字母序或词序&#xff0c;是指在排序时&#xff0c;按照字母顺序或数字顺序等自然顺序进行排序的方法。通常&#xff0c;字典序应用于字符串排序&#xff0c;但也适用于其他类型的数据结构。 对于字符串来说&#xff0c;字典序的排…

探究 Switch Case 和 While 循环:两种强大的控制结构

在计算机编程中&#xff0c;控制结构是指用于控制程序执行流程的特殊语句或语法。这些结构使程序能够根据不同的条件执行不同的操作&#xff0c;从而增强了程序的灵活性和功能性。本文将介绍两种常见的控制结构&#xff1a;Switch Case 和 While 循环&#xff0c;并通过示例代码…

【前端】Layui的表格常用功能,表单提交事件,表格下拉按钮点击事件,表格外的按钮点击事件

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

使用vue-quill-editor实现图片截图复制粘贴上传

需求 运营需要用多张图片进行OCR识别&#xff0c;图片来源一般是运营的截图&#xff0c;直接粘贴过来&#xff0c;然后需求请求OCR截图提交图片list&#xff0c;粘贴图片的同时需要上传图片到cdn地址&#xff1b; 分析 一个输入框&#xff08;富文本框&#xff09;&#xff…