【办公类-22-08】周计划系列(3-3)“信息窗+主题知识(上传+打印)” (2024年调整版本)

news2025/1/15 7:26:35

作品展示

背景需求:

前文将信息窗+主题知识的内容提取并优化结构

【办公类-22-07】周计划系列(3-1)“信息窗+主题知识(提取)” (2024年调整版本)-CSDN博客文章浏览阅读803次,点赞7次,收藏16次。【办公类-22-07】周计划系列(3-1)“信息窗+主题知识(提取)” (2024年调整版本)https://blog.csdn.net/reasonsummer/article/details/136281042

【办公类-22-07】周计划系列(3-2)“信息窗+主题知识(优化)” (2024年调整版本)-CSDN博客文章浏览阅读1k次,点赞18次,收藏13次。【办公类-22-07】周计划系列(3-2)“信息窗+主题知识(优化)” (2024年调整版本)https://blog.csdn.net/reasonsummer/article/details/136354870?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136354870%22%2C%22source%22%3A%22reasonsummer%22%7D

后续就是将19份WORD

1、word做成图片png——图片上传网页

2、word合并PDF——批量打印A4纸

设计过程

一、word做成图片png——图片上传网页

1、把“信息窗+主题知识”转为png格式(a4横板一页)

代码展示:

'''
作者:毛毛 
性质:转载
原网址 https://zhuanlan.zhihu.com/p/367985422

安装python,确保以下模块已经安装:win32com,fitz,re
在桌面新建文件夹,命名为:word2pdf2png
将需要转换的word(只能docx格式,可以多个)放入文件夹word2pdf2png
复制以下代码并运行。

本代码只生成png 文件夹内只有一级,子文件不生成

说明:
1、
2、把“03 新周计划生成(原版)”的内容复制到“04 新周计划(没有反思的打印)”
3、把“04 新周计划(没有反思的打印)”内容复制到“05 新周计划(没有反思的jpg上传)”
4、然后“05 新周计划(没有反思的jpg上传)”文件夹删除并生成第一张无反思的图片20份
5、空余时间。把““03 新周计划生成(原版)”文件夹的内容复制到“08 新周计划生成(手动修改-准)”文件夹,手动修改
(1)周计划第一页反思(限定在一页内)
(2)教案等
'''
#coding=utf-8
from win32com.client import Dispatch
import os
import re
import fitz
wdFormatPDF = 17 #转换的类型
zoom_x=2 #尺寸大小,越大图片越清晰 5超大,这里改成2
zoom_y=2 #尺寸大小,越大图片越清晰,长宽保持一致
rotation_angle=0#旋转的角度,0为不旋转


# print(----'把"04合成新信息窗主题知识"文件夹里的资料复制到"05jpg上传"'-----)

import os
import shutil

def copy_docx_files(source_dir, dest_dir):
    for filename in os.listdir(source_dir):
        source_path = os.path.join(source_dir, filename)
        dest_path = os.path.join(dest_dir, filename)
        
        if os.path.isfile(source_path) and filename.endswith(".docx"):
            shutil.copy(source_path, dest_path)
        
        if os.path.isdir(source_path):
            copy_docx_files(source_path, dest_dir)

# 指定源文件夹和目标文件夹
old_pat =r'D:\test\02办公类\91周计划4份_2024年中4班\06 信息窗+主题知识\04合成新信息窗主题知识(修改补充版)'  # 要复制的文件所在目录
new_path = r'D:\test\02办公类\91周计划4份_2024年中4班\06 信息窗+主题知识\05jpg上传'  #新路径


# 调用复制函数
copy_docx_files(old_pat, new_path)


#print(----生成PDF和第一页图片-----)
def doc2pdf2png(input_file):

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.(docx|doc)$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                word = Dispatch('Word.Application')
                doc = word.Documents.Open(filename)
                doc.SaveAs(filename.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
                doc.Close()
        word.Quit()

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.pdf$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                # 打开PDF文件
                pdf = fitz.open(filename)
                # 逐页读取PDF
                for pg in range(0, pdf.pageCount):
                    page = pdf[pg]
                    # 设置缩放和旋转系数
                    trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
                    pm = page.getPixmap(matrix=trans, alpha=False)
                    # 开始写图像
                    pm.writePNG(filename.replace('.pdf', '') + str(pg+1) + ".png")
                pdf.close()

doc2pdf2png(new_path)

# 删除生成文件PDF  和 生成文件docx
for parent, dirnames, filenames in os.walk(new_path):
    for fn in filenames:
        if fn.lower().endswith('.pdf'):
            os.remove(os.path.join(parent, fn))
        if fn.lower().endswith('.docx'):# 删除原始文件docx 正则[pdf|docx]套不上,只能分成两条了
            os.remove(os.path.join(parent, fn))
           
# 删除png中,尾号是2-8的png(Word只要第一页,后面生成的第二页图片不要
for parent, dirnames, filenames in os.walk(new_path):
        for fn in filenames:
            for k in range(2,9):                # png文件名的尾数是2,3,4,5,6,7,8 不确定共有几页,可以把9这个数字写大一点)
                if fn.lower().endswith(f'{k}.png'):  # 删除尾号为2,3,4,5,6,7,8的png图片 f{k}='{}'.formart(k) 
                    os.remove(os.path.join(parent, fn))

图片结果展示

先出现word和PDF

在出现一张图片

图片版,便于直观了解 信息窗和主题说明是否正好半页

2、把png切割成两类图片,便于上传“班级主页”

由于信息窗和主题知识在一页上,但是上传班级主页时,需要拆分开来,所以要用坐标把图片切割。

代码展示


# 参考网址:https://blog.csdn.net/weixin_42182534/article/details/125773141?ops_request_misc=&request_id=&biz_id=102&utm_term=python%E6%88%AA%E5%8F%96%E5%9B%BE%E7%89%87%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-125773141.nonecase&spm=1018.2226.3001.4187

'''

功能:切割图片
'''

import os
import os.path

from PIL import Image


cood=[[30,85,842,1100],[830,85,1684,1100]]
# 左边距,上边距,右边距,下边距


# # # print('----------第2步:新建一个临时文件夹------------')
# # # # # 新建一个”装N份word和PDF“的文件夹

h=['']

name=['06信息窗上传图片','07主题知识上传图片']
ys=['信息窗','主题知识']

for i in range(len(name)):

    imagePath1=r'D:\test\02办公类\91周计划4份_2024年中4班\06 信息窗+主题知识\{}'.format(name[i])
    if not os.path.exists(imagePath1):  # 判断存放图片的文件夹是否存在
        os.makedirs(imagePath1)  # 若图片文件夹不存在就创建
    else:
        pass

    # 定义文件所在文件夹
    image_dir = r'D:\test\02办公类\91周计划4份_2024年中4班\06 信息窗+主题知识\05jpg上传'
    for parent, dir_name, file_names in os.walk(image_dir):  # 遍历每一张图片
        for filename in file_names:
            # print(filename)
            # 第19周 中4班 信息窗主题知识(2024.6.24——2024.6.28)1.png   
            pic_name = os.path.join(parent, filename)
            image = Image.open(pic_name)
            _width, _height = image.size
            # print(_width, _height)
            # 1684 1191

            
            # print(newname1)
            # newname2= split_str[1]# _的第0部分=序号 

            a=cood[i][0]
            b=cood[i][1]
            c=cood[i][2]
            d=cood[i][3]        
                    
            # 定义裁剪范围(left, upper, right, lower)1024
            # # box = image.crop((0,0,123,123))
            box = image.crop((a,b,c,d))

            # 10 第十周 信息窗(2024.4.22——2024.4.26)(2024.4.8——2024.5.6)(中4班下学期)-在动物园里1.png

            # 各种切割点
            u= filename.split(' ')         
            v= filename.split(')')          
            w= filename.split('(')

            # 第0空格左边是01 第1空格左边是第五周,ys是“信息窗或主题知识” 
            # w [1]=第1组()也就是信息窗的日期范围,(每周一份不同)
            # w [2]=第2组()也就是主题说明日期范围(2-3周一份相同)
            week=u[0]+' '+u[1]+' '+ys[i]+ '('+w[i+1]+'('+w[3]
            print(week)

            # 19 第十九周 信息窗(2024.6.24——2024.6.28)(中4班下学期)-火辣辣的夏天1.png
            box.save(imagePath1+r'\\{}'.format(week))          
        # print('Done!')   

利用坐标切割图片,并保存在指定文件夹里,控制图片名称

(1)信息窗:上传图片

上传过程详见

【办公类-25-01】20240304 UIBOT上传 ”班级主页-信息窗“-CSDN博客文章浏览阅读910次,点赞16次,收藏17次。【办公类-25-01】20240304 UIBOT上传 ”班级主页-信息窗“https://blog.csdn.net/reasonsummer/article/details/136380938

(2)主题知识:上传图片

上传过程详见

【办公类-25-01】20240301 UIBOT上传 ”班级主页-主题知识“-CSDN博客文章浏览阅读849次,点赞29次,收藏11次。【办公类-25-01】20240301 UIBOT上传 ”班级主页-主题知识“https://blog.csdn.net/reasonsummer/article/details/136400644

结论:终于搞完了一套“周计划资料-信息窗主题说明”,耗费好久天,但是与去年相比,代码更周全,减少一些替换EXCEL的动作。更优化了代码。

在去年制作的基础上进一步优化

【办公类-22-01】周计划系列(1)-生成“信息窗”(提取旧docx内容,写入EXCLE模板,再次生成新docx)-CSDN博客文章浏览阅读232次。【办公类-22-01】周计划系列-信息窗的制作(提取旧docx内容,写入EXCLE模板,再次生成新docx)https://blog.csdn.net/reasonsummer/article/details/129843824icon-default.png?t=N7T8https://blog.csdn.net/reasonsummer/article/details/129843824【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)_从docx-tpl怎么:导入docx模板-CSDN博客文章浏览阅读583次。【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)_从docx-tpl怎么:导入docx模板https://blog.csdn.net/reasonsummer/article/details/129902271icon-default.png?t=N7T8https://blog.csdn.net/reasonsummer/article/details/129902271 

内容很多啊,我感觉还需要进一步厘清思路,继续优化设计一些可以通用的“周计划系列替换代码”

二、word合并PDF——批量打印A4纸

用AI对话大师写一段Python代码

代码展示


# 19份docx合并成1个pdf

import os
from docx2pdf import convert
from PyPDF2 import PdfMerger

# 定义文件夹路径
source_folder = '123'
target_folder = '234'
 
print('-----复制修改过的文件“04合成新信息窗和主题知识”到03修改补充版,类似与再次放在“03去掉回车”-----')

path = r'D:\test\02办公类\91周计划4份_2024年中4班\06 信息窗+主题知识'
# 源文件夹路径
source_folder= path+r'\04合成新信息窗主题知识(修改补充版)'
# 目标文件夹路径
target_folder = path+r'\08docx合并pdf'
# 零时文件夹
t_folder = target_folder+r'\零时文件夹'

if not os.path.exists(t_folder):  # 判断存放图片的文件夹是否存在
    os.makedirs(t_folder)  # 若图片文件夹不存在就创建
else:
    pass



# 获取docx文件列表
docx_files = os.listdir(source_folder)
docx_files = [f for f in docx_files if f.lower().endswith('.docx')]
docx_files = docx_files[:]  # 只处理前10个docx文件 所有文件都处理

# 将docx文件转换为PDF
pdf_files = []
for docx_file in docx_files:
    docx_path = os.path.join(source_folder, docx_file)
    pdf_file = docx_file[:-5] + '.pdf'
    pdf_path = os.path.join(t_folder, pdf_file)
    convert(docx_path, pdf_path)
    pdf_files.append(pdf_path)

# 合并PDF文件
merger = PdfMerger()
for pdf_file in pdf_files:
    merger.append(pdf_file)

# 保存合并后的PDF文件
output_file = os.path.join(target_folder, '(打印)2024年2月中4班信息窗主题知识合并版.pdf')
merger.write(output_file)
merger.close()

print('合并完毕,结果保存在{}'.format(output_file))


# # print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree(t_folder ) #递归删除文件夹,即:删除非空文件夹

运行时,代码会生成一个零时文件夹,19份docx文件会转成19个PDF文件

打印过程

日后展示……

通过Python代码,将“信息窗+主题知识”快速制作两种结果

1、“网页上传“——图片png版本,便于UIBOT批量上传图片

起因:

以前都是打开每一个docx,用微信的ALT+A截图,。手动截图每张图片的大小会不同,更烦的是:把图片另存,需要手动输入“第几周。png”,的文字。然后再上传图片时,需要在标题里,手动输入图片上面的“信息窗  XXX年XX月XX日——XXXX年XX月XX日“的文字,选择上传日期”,反复N次,特别容易输入错日期。o(╥﹏╥)o

优势:

用Python批量修改信息窗、主题知识的关键信息,作为文件名,并快速将word转为png图片,便于UIBOT批量上传图片(根据文件名提取黏贴标题和上传时间)(* ̄︶ ̄)

2、“信息墙”——一张A4纸,便于批量、按序打印纸类信息窗

起因:

以前是一份份打开word,再逐一按打印,不仅打的慢,而且出纸后,需要手动将纸张排序。并检查是否少了某一份(很容易少打某一份)o(╥﹏╥)o

优势:

合并为PDF19份统一打印,只要打开一份pdf,确保全部能打印,打印出纸后,都是按顺序排号的,不用整理。(* ̄︶ ̄)

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

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

相关文章

新一代WLAN解决方案与WLAN的配置实现

案例背景为二层旁挂式组网,转发方式为直接转发,管理Vlan为100,业务Vlan为101。 基本配置: SW1: [SW1]VLAN batch 100 101 [SW1-GigabitEthernet0/0/1]port link-type trunk [SW1-GigabitEthernet0/0/1]port trunk a…

SQL 初级

SQL 初级 SQL 简介 SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。 SQL 是什么? SQL…

【Linux C | 网络编程】多播的概念、多播地址、UDP实现多播的C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

提高生产效率!虹科MSR165快速检测机器故障,实现精准优化

如今,各种生产机器、机床和运输机都采用了复杂的驱动技术,以便在三个轴上准确生成线性运动或者高效旋转运动。所有机械运动中都会出现特征性的振动或震动模式,可以在该背景下利用这些模式来监测和优化整个驱动技术的机电参数。在这个过程中&a…

太阳能光伏电池的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 光伏电池的基本结构 4.2 光伏电池的工作原理 5.完整工程文件 1.课题概述 太阳能光伏电池的simulink建模与仿真.分析不同光照温度,光照强度下的光伏电池的U-I特性曲线以及P-V特性曲线。 …

备战蓝桥(模板篇)

扩展欧德里几算法 质数筛 分解质因数 LCA BFS floyd Dijkstra prime 日期是否合法 Tire异或 模拟散列表 字符哈希 Tire字符串统计

官方教程 | 在 OpenBayes 平台进行组织协作

想和好 homie 共享账户余额、存储、数据集、模型、容器等资源,又不想共享自己的账户密码? 想跟团队成员分工协作、高效 Coding、加速炼丹,又想隔离权限、差异化管理? 经过为期半年的内测和完善,OpenBayes贝式计算的组织…

平面纯弯梁单元Matlab有限元编程 |欧拉梁单元| 简支梁|悬臂梁|弯矩图 |变形图| Matlab源码 | 视频教程

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

Ajax、Axios、Vue、Element与其案例

目录 一.Ajax 二.Axios 三.Vue 四.Element 五.增删改查案例 一.依赖:数据库,mybatis,servlet,json-对象转换器 二.资源:elementvueaxios 三.pojo 四.mapper.xml与mapper接口 五.service 六.servlet 七.html页…

目前研一,是选 FPGA 还是 Linux 嵌入式?

目前研一,是选 FPGA 还是 Linux 嵌入式? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux 的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&a…

Sora:AI视频生成的新机遇与挑战

随着科技的飞速进步,人工智能(AI)和机器学习(ML)技术已经深入渗透到社会的各个领域。其中,Sora这类基于AI的视频生成工具因其高度逼真的生成能力而备受瞩目。然而,正如一枚硬币有两面&#xff0…

力扣刷题Days11第二题--141. 环形链表(js)

目录 1,题目 2,代码 2.1快慢指针 2.2,哈希表 3,学习与总结 3.1自己尝试写快慢指针 反思 1,题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达&…

蓝牙APP开发实现汽车遥控钥匙解锁汽车智能时代

在现代社会,随着科技的不断发展,汽车已经不再是简单的交通工具,而是与智能科技紧密相连的载体。其中,通过开发APP蓝牙程序实现汽车遥控钥匙成为了一种趋势,为车主带来了便捷与安全的体验。虎克技术公司作为行业领先者&…

HTML开发工具和环境介绍,内附超详细的VS code安装教程!

工欲善其事必先利其器,一款好的开发工具可以让我们事半功倍。前面我们对HTML的相关概念和基本结构已经有了基本的了解,下面我们就来安装在前端开发中的需要使用的开发工具及环境。 在众多HTML编辑器中,选择一个适合自己的工具至关重要。今天…

如何选择适合您需求的虚拟主机服务

随着互联网的发展,虚拟主机服务在网站托管领域扮演着至关重要的角色。我们在前几天遇到客户咨询如何在Hostease服务商选择适合的主机服务。本文将介绍如何选择适合您需求的虚拟主机服务,以确保您的网站或应用程序能够稳定运行并获得最佳性能。 确定您的需…

Spring之@Transactional源码解析

前言 我们在日常开发的时候经常会用到组合注解,比如:EnableTransactionManagement Transactional、EnableAsync Async、EnableAspectJAutoProxy Aspect。今天我们就来抽丝剥茧,揭开Transactional注解的神秘面纱 EnableTransactionManagement注解的作用 当我们看到类似Ena…

nodejs web服务器 之初始化路由

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。在匹配时,会按照顺序进行匹配,请求类型和请求的URL同时匹配成功,返回对应的数据。 我们可以创建一个js文件&a…

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI,企业与Lowes之间可以直接交换各种商业文档,如订单、发票、收据等,从而实现信息的实时交换,提高了供应链的效率和准确性。在现代供应链管理中,EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…

【数据结构】矩阵的压缩存储

矩阵的压缩存储 5.1 普通矩阵的存储 用二维数组存储 分为行优先和列优先: 行优先:优先存放一行的数据。 列优先:优先存放一列的数据。 注意下标是从0还是1开始的! 5.2 对称矩阵的存储 对称矩阵定义 若n阶方阵中任意一个元素 a i …

【Python】新手入门(8):什么是迭代?迭代的作用是什么?

【Python】新手入门(8):什么是迭代?迭代有什么应用? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】…