首页 > 其他分享 >【办公类-22-15】周计划系列(5-6)“周计划-06 周计划打印pdf(docx删除内容转PDF)“ (2024年调整版本)

【办公类-22-15】周计划系列(5-6)“周计划-06 周计划打印pdf(docx删除内容转PDF)“ (2024年调整版本)

时间:2024-03-19 20:05:05浏览次数:15  
标签:docx 06 打印 PDF 计划 file path pdf

作品展示

背景需求:

前期用docx(删除第一页反思部分内容)转PDF转png(第一页)的方式获得上传网页用的图片。

【办公类-22-14】周计划系列(5-5)“周计划-05 上传周计划png(docx转PDF转png)“ (2024年调整版本)-CSDN博客文章浏览阅读600次,点赞11次,收藏9次。【办公类-22-14】周计划系列(5-5)“周计划-05 上传周计划png(docx转PDF转png)“ (2024年调整版本)https://blog.csdn.net/reasonsummer/article/details/136660866

去年我用转成了png图片打印的周计划,感觉打印出来的图片会比直接用docx打印的内容模糊一点、字体小一点。

所以今年我想试试 在docx内将第一页反思删除、第2-5页内容删除。然后将docx转成PDF,再合并,打印出来看看这种docx转成PDF直接转的方法下,文字是否会更清晰一点。

素材准备:

第一张表的反思部分不要,第2-4页内容删光

代码展示:

'''周计划第一页的合并打印(docx删除第1页反思,删除第2-4页所有内容,转为PDF,19份PDF合并打印PDF)
作者:阿夏:
时间:2024年3月18日
'''

# 19个docx合并成一个PDF,便于打印

import os
from docx2pdf import convert
from PyPDF2 import PdfMerger
from docx import Document

path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'
old=path+r'\06加粗测试'
new=path+r'\08docx合并pdf'
new_ls=new+r'\零时文件夹'

 
# 检查文件夹是否存在
if not os.path.exists(new_ls):
    # 如果文件夹不存在,则新建文件夹
    os.makedirs(new_ls)



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

# 处理.docx文件

import time
from docx import Document
from docx.shared import Pt
from docx.enum.section import WD_ORIENT
from docx.shared import Cm


print('--------1、遍历把周计划docx删掉反思内容,另存到jpg上传文件夹---------')
folder_path = old
for file_name in os.listdir(folder_path):
    print(file_name)
    if file_name.endswith('.docx'):
        file_path = os.path.join(folder_path, file_name)
        doc = Document(file_path)

        # 删除第0张表格里反思格子里的内容
        table = doc.tables[0]  # 假设第一页只有一个表格
        cell = table.cell(1, 8)  # 获取第1行第8列的单元格
        cell.text = ''  # 清空单元格内容

     # 找到第一个分节符(分页符)后的位置
        start_index = 3        # 第1、2行 第3行内容保留(都是第一页上的段落文字
        for i, paragraph in enumerate(doc.paragraphs):
            if paragraph.runs:
                if paragraph.runs[0].text == '\x0c':  # 分页符的Unicode码为'\x0c'
                    start_index = i + 1
                    break

        # 删除第一个分节符后的段落,标题日期,这是教案表格还在的
        for i in range(start_index, len(doc.paragraphs)):
            for run in doc.paragraphs[i].runs:
                run.text = ''

        # 删除教案表格2-5。删除后会有4个空行
        tables = doc.tables[1:]        # 表格0是周计划,1-3是教案表格,需要删除
        for table in tables:
            table._element.getparent().remove(table._element)

        # 删除表格后,会有4个段落空行,把空行删除
        for paragraph in doc.paragraphs:
            if not paragraph.text.strip():  # 如果段落是空行
                # 删除空行
                p = paragraph._element
                p.getparent().remove(p)


        # 这是只有一页周计划了,但是显示是竖版的,需要改成横版
        section = doc.sections[0]

        # 设置页面方向为横版
        section.orientation = WD_ORIENT.LANDSCAPE

        # 设置页面的宽度和高度
        section.page_width = Cm(29.7)  # 设置页面宽度,842磅为A4纸宽度
        section.page_height =Cm(21.0)  # 设置页面高度,595磅为A4纸高度

        # 设置页面边距为上下左右各1厘米
        section.top_margin = Cm(1)
        section.bottom_margin = Cm(1)
        section.left_margin = Cm(1)
        section.right_margin = Cm(1)

        # 保存新的Word文档
        doc.save(new_ls+r'\{}'.format(file_name))
        time.sleep(1)

# # 将零时文件夹docx文件转换为PDF
pdf_files = []
for ls_name in os.listdir(new_ls):
    print(ls_name)
    if ls_name.endswith('.docx'):# 
        docx_path = os.path.join(new_ls, ls_name)
        pdf_file = ls_name[:-5] + '.pdf'
        pdf_path = os.path.join(new_ls, pdf_file)
        convert(docx_path, pdf_path)
        time.sleep(1)
        pdf_files.append(pdf_path)

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

# 保存合并后的PDF文件
output_file = os.path.join(new, '(打印)2024年2月周计划合并版.pdf')
merger.write(output_file)
merger.close()

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

import shutil
# 删除临时文件夹    
shutil.rmtree(new_ls)

作品展示:

一共19周的周计划第一页

用pdf批量打印第6-19周的周计划的第一页

拿了一张用word打印的周计划,对比文字大小

将前几周用周计划.docx打印的周计划纸张与本次用19周合并周计划.pdf打印的周计划纸张做对比,明显看到:

1、PDF合并打印的文字内容小一点。

用word打印的A4纸上的内容文字比用pdf打印的A4纸的文字内容更大(pdf会自动缩小上下左右的边距。)pdf打印的A4纸的文字会比word打印的文字小一号(类似 字体四号转字体小四)

2、PDF合并打印的文字内容清晰度略微降低

对比pdf打印字体与word打印字体,两者的文字清晰度差异不明显,但是仔细看,还是可以感觉到pdf打印的文字跟更深一点,字号更小一点。

3、如果没有与word打印纸张进行对比,只看pdf打印的周计划纸张,基本看不出明显的字号、颜色、清晰度差异。

4、由于目前这些都是班本化资料,不需要做档案,所以我觉得还是用合并pdf打印快捷方便。

最后,我将“周计划”、“信息窗+主题知识”+“育儿知识”按照时间分别摆在一起,便于每周五更换。

感悟:

批量制作周计划、批量打印周计划,快速实现常态化备课任务,完成保底工作,便能有时间和精力应对日常工作中的突发任务和随机变化的工作内容,提升工作质量。

后续思考

 这些贴墙版的周计划纸张不需要上交,可是在处理需要上交入档的周计划+教案时,我觉得还是要将19周周计划在word里面合并,用word打印最合适

(1)因为pdf打印文字会缩小

(2)因为word转pdf最大的问题就是宋体加粗会变回宋体常规,)还是用word打印能保留原格式。

(等全部教案完全修改完善批量生成后,我再做一份期末入档用的word合并周计划,docx,又能批量打印,文字也是高清的,最大号的,还要让第1页周计划和第3页后面是空白的,符合双面打印的规范要求

标签:docx,06,打印,PDF,计划,file,path,pdf
From: https://blog.csdn.net/reasonsummer/article/details/136805066

相关文章

  • P7880 [Ynoi2006] rldcot
    题意给定一棵树,求区间\([l,r]\)中任意两点的LCA的不同的带权深度的个数。Sol很容易想到Dsuontree。因为当前点\(x\)作为LCA产生贡献当且仅当有两点\(u,v\)分别在\(x\)的不同子树中。集中注意力,不难发现对于一个\(u\)来说,只有子树中她在序列上的前驱后继会......
  • 06使用WSL获得Ubuntu系统环境
    什么是WSLWindowsSubsystemforLinux,是用于Windows系统之上的Linux子系统作用很简单,可以在Windows系统中获得Linux系统环境,并完全直连计算机硬件,无需通过虚拟机虚拟硬件简而言之:Windows10的WSL功能,可以无需单独虚拟一套硬件设备,就可以直接使用主机的物理硬件,构建Linux操作系......
  • 打造程序员“造星计划”—从容应对裁员难题
    用键盘,敲出灵动的字符;用鼠标,点出幸福的人生;用智慧,推敲缜密的逻辑;用灵感,推开想象的大门;用语言,谱出鲜活的程序;用自信,编出明天的精彩。程序员节,愿你成就精彩,乐享人生!。用键盘,敲出灵动的字符;用鼠标,点出幸福的人生;用智慧,推敲缜密的逻辑;用灵感,推开想象的大门;用语言,谱出鲜活的......
  • 06_C++多维数组
    多维数组,数组指针在二维数组上的应用。#include<iostream>#include<stdio.h>usingnamespacestd;intmain(){intarr[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};int(*p)[5]=arr;cout<<"*p:"<<*p<<endl......
  • 杭电OJ 2066 一个人的旅行
    一个人的旅行考查图论中的单源最短路径问题,首先图的存储方式,前面说过在实际程序中一般用邻接表,为每一个顶点都分配一个单链表(向量)。由于这里顶点的总个数并不确定,用visit数组在集合T中遍历寻找下一个用来松弛的顶点,这一方式不太合适,所以这里我用优先队列,每次弹出距离起始点距离......
  • linux hadoop106 history 1000
    ls2bin/flinkrun./examples/batch/WordCount.jar-Dexecution.runtime-mode=BATCH--input/opt/module/word.txt--output/opt/module/result.txt3bin/flinkrun./examples/batch/WordCount.jar-Dexecution.runtime-mode=BATCH-yDfs.overwrite-files=......
  • mysqly索引(explain 执行计划)
    关键词执行计划EXPLAIN+语句查看mysql优化后的语句showwarnings;EXPLAIN执行后,各列的含义要点:select_type如何查询表type如何查询行key如何使用索引key_len索引使用多少rows行预计使用多少extra表的额外信息1.idid列的编号是select的序列号......
  • 健身计划
    不要垃圾容量,热身一定充分,护腕无时无刻,无论什么动作,一定要戴上;每周至少一次的有氧,晚上别熬夜,要开心二月一二三四五六日春节胸+肱三背+肱二臀腿+肩有氧+腹胸+肱三公司聚餐背+肱二腿+肩腹胸+肱三旅游旅游三月一......
  • 069基于CNN卷积神经网络的大豆叶片形态检测小程序版本
    代码下载和视频演示地址:068-069基于CNN卷积神经网络的大豆叶片形态检测pyqt和小程序版本_哔哩哔哩_bilibili效果展示图如下:​代码文件展示如下:​运行01数据集文本生成制作.py可以对data文件夹下图片保存在txt文本中。运行02train.py读取txt中的图片路径和对应标签......
  • NOJ南邮上机 最大公约数和最小公倍数 PROB1006 Python
    PROB1006  最大公约数和最小公倍数描述:求两个正整数的最大公约数和最小公倍数输入:两个正整数A,B输出:两个正整数的最大公约数、最小公倍数样例输入:43样例输出:112defmax_gcd(a,b):whileb!=0:temp=a%ba=bb=temp......