【办公类-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 shutil

print('-----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=='整理':        # 排除“整理”文件夹
        pass
    else:
        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:# 如果复制文件相同,就跳过                
                continue
            if '5分钟' in file:
    #             # 不要有5分钟文件名的docx
                pass
            else:
                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 shutil

print('-----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=='整理':        # 排除“整理”文件夹
        pass
    else:
        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:# 如果复制文件相同,就跳过                
                continue
            if '5分钟' in file:
    #             # 不要有5分钟文件名的docx
                pass
            else:
                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("转换完成!")


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

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

相关文章

2024 MCM数学建模美赛2024年A题复盘,思路与经验分享:资源可用性与性别比例 | 性别比例变化是否对生态系统中的其他生物如寄生虫提供优势(五)

审题 第四问让我们探究性别比例变化是否对生态系统中的其他生物如寄生虫提供优势。这里我们可以把问题简化一下,只探究性别比例会不会对寄生虫提供优势。因为考虑太多生物,会使模型更复杂,我这个水平处理不了这么复杂的问题,是我…

整数在内存里面的存储

整数在内存里面的存储 整数在计算机里面的存储是按照二进制的方式进行存储 显示的时候是按照16进制的方法进行显示 1. 整数在内存中的存储在讲解操作符的时候,我们就讲过了下⾯的内容:整数的2进制表⽰⽅法有三种,即原码、反码和补码 三种…

案例研究|DataEase实现物业数据可视化管理与决策支持

河北隆泰物业服务有限责任公司(以下简称为“隆泰物业”)创建于2002年,总部设在河北省高碑店市,具有国家一级物业管理企业资质,通过了质量体系、环境管理体系、职业健康安全管理体系等认证。自2016年至今,隆…

FIM配置

FIM(功能抑制管理器) FIM模块根据DTC状态来确定对应功能是否要禁止 FiM_GetFunctionPermission通过RTE提供给SWC FiMFIDs FiMInhibitionConfigurations FiMInhFunctionIdRef:关联FIMID FiMInhInhibitionMask: FIM_LAST_FAILED Inh Event…

【氮化镓】p-GaN栅极退化的温度和结构相关性

论文总结: 本文献深入研究了带有p-GaN栅极的正常关断型(normally-off)高电子迁移率晶体管(GaN-HEMTs)在恒定电压应力下的时序退化行为。通过直流特性分析和温度依赖性分析,研究了故障时间(TTF)与应力温度和器件几何结构的依赖性。结果显示,p…

算法打卡day19

今日任务: 1)235. 二叉搜索树的最近公共祖先 2)701.二叉搜索树中的插入操作 3)450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode&…

Android 自定义EditText

文章目录 Android 自定义EditText概述源码可清空内容的EditText可显示密码的EditText 使用源码下载 Android 自定义EditText 概述 定义一款可清空内容的 ClearEditText 和可显示密码的 PasswordEditText,支持修改提示图标和大小、背景图片等。 源码 基类&#xf…

大语言模型(LLM)token解读

1. 什么是token? 人们经常在谈论大模型时候,经常会谈到模型很大,我们也常常会看到一种说法: 参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。 什么是token?比…

【C语言】Infiniband驱动init_dev_assign函数

一、注释 一个内核模块的初始化函数,用于分配和初始化某些资源。以下是对代码块的逐行中文注释: // 定义一个初始化设备分配的函数 static void init_dev_assign(void) {int i 1;spin_lock_init(&dev_num_str_lock); // 初始化自旋锁if (mlx4_fil…

量化交易入门(二十三)什么是MTM指标,原理是什么

MTM指标全称是Momentum指标,翻译为动量指标。它用来衡量市场价格在一定时间内上涨或下跌的幅度,属于趋势型指标。其计算公式是: MTM(N) 当前收盘价 - N日前的收盘价 其中N表示统计的周期数,常用参数有6日、12日和24日。 MTM指标的应用要点如下: 判断趋势强弱:MTM数值越大,表…

泛型的进阶

1 通配符 &#xff1f; 我们想调用fun函数帮我们打印&#xff0c;但由于不知道Message具体是什么类型&#xff0c;所以我们可以使用 &#xff1a; &#xff1f;即通配符 当我们将fun函数中改为Message<?>此时就不会报错 2 通配符的上界&#xff1a; <? extends 上…

如何使用 ArcGIS Pro 自动矢量化水系

对于某些要素颜色统一的地图&#xff0c;比如电子地图&#xff0c;可以通过图像识别技术将其自动矢量化&#xff0c;这里为大家介绍一下 ArcGIS Pro 自动矢量化水系的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的电子地图数据&#…

二分练习题——123

123 二分等差数列求和前缀和数组 题目分析 连续一段的和我们想到了前缀和&#xff0c;但是这里的l和r的范围为1e12&#xff0c;明显不能用O(n)的时间复杂度去求前缀和。那么我们开始观察序列的特点&#xff0c;可以按照等差数列对序列进行分块。如上图&#xff0c;在求前10个…

虚拟机Linux(centos)安装python3.8(超详细)

一、Python下载 下载地址&#xff1a;https://www.python.org/downloads/source/ 输入下面网址即可直接下载&#xff1a; python3.8&#xff1a;https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz python3.6&#xff1a;https://www.python.org/ftp/python/3.6.5/…

Chrome 插件 tabs API 解析

Chrome.tabs API 解析 使用 chrome.tabs API 与浏览器的标签页系统进行交互&#xff0c;可以使用此 API 在浏览器中创建、修改和重新排列标签页 Tabs API 不仅提供操作和管理标签页的功能&#xff0c;还可以检测标签页的语言、截取屏幕截图&#xff0c;以及与标签页的内容脚本…

Prompt Engineering的4 种方法

此为观看视频 4 Methods of Prompt Engineering 后的笔记。 从通用模型到专用模型&#xff0c;fine tuning&#xff08;微调&#xff09;和prompt engineering&#xff08;提示工程&#xff09;是2种非常重要的方法。本文深入探讨了prompt engineering的4种方法。 首先&#…

MySQL数据库的高级SQL语句与高级操作(2)

目录 一、子查询 1、语法: 2、以下例子均以图中两个表为基础 例子1&#xff1a;查询yun1班级大于85分的学生记录 例子2&#xff1a;将yun2班的学生记录放在一个单独的表中&#xff0c;叫yun2 例子3&#xff1a;教务处误把yun3班叫张丽的学生的成绩搞错了&#xff0c;应该为…

Machine Learning机器学习之向量机(Support Vector Machine,SVM)

目录 前言 算法提出背景&#xff1a; 核心思想&#xff1a; 原理&#xff1a; 应用领域&#xff1a; 一、支持向量机分类&#xff08;主要变体&#xff09; 二、构建常见的支持向量机模型 基于Python 中的 Scikit-learn 库构建线性支持向量机&#xff08;SVM&#xff09; 三、向…

Matplotlib数据可视化实战-2绘制折线图(2)

2.11营业额可视化 已知某学校附近一个烧烤店2022年每个月的营业额如下图所示。编写程序绘制折线图对该烧烤店全年营业额进行可视化&#xff0c;使用红色点画线连接每个月的数据&#xff0c;并在每个月的数据处使用三角形进行标记。 烧烤店营业额 月份123456789101112营业额/万…

Python调用Python并传参

常规 在Python中调用另一个Python脚本可以通过多种方式实现&#xff0c;例如使用subprocess模块或者直接导入模块。以下是两种常见的方法&#xff1a; 使用subprocess模块&#xff1a; 调用 import subprocess # 调用另一个Python脚本&#xff0c;例如script.py subprocess.r…