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

作品展示

背景需求:

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

【办公类-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,确保全部能打印,打印出纸后,都是按顺序排号的,不用整理。(* ̄︶ ̄)

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值