【办公类-47-02】20250103 课题资料快速打印(单个docx转PDF,多个pdf归并
https://i-blog.csdnimg.cn/direct/fbbf6c3b15924ef79ec1b22eabd42ee0.png背景需求:
2023区级大课题《运用Python优化3-6岁幼儿学习运动质料的实践研究》需要做阶段资料
原来应该2024年6月就提交电子稿和打印稿。可是python学具的教学实验着实太多了,不断生成,我忙着做教学,都没有精力去整理。
2025年1月3日,是2024区级大课题阶段资料上交的时期,科研主任让我必须上交存档了。
于是我花了一周终于把资料贴好了(成果太多了,都不知道用那份好),提交电子稿。同时需要打印成纸稿。
https://i-blog.csdnimg.cn/direct/a2161e77ae3249eb80823cfee98b9c33.png
存在问题:
1.需要打印的每个Word文件都在单独的文件夹里,每次打印都需要打开一个文件夹,然后打开Word,再打印,打印时要选择参数(双面打印等)
https://i-blog.csdnimg.cn/direct/a012151126d8484387aa96186e983722.png
2.最后还需要把打印出来的纸稿按照次序排列。调解正反面。这需要查对目录。也泯灭时间。
解决思绪
写的已经很累了,不想在打印整理上费脑子。我想做成一个PDF归并打印。直接就获取整理好次序的纸稿。
1、把单个Word转成pdf
2、把所有pdf按照次序归并在一个pdf内
解决方式:
1、Word都是doc文件,需要转成docx。
2、每个文件夹里的docx有1个(课题文档),或多个(一些参考资料),但只有1个docx是需要的
https://i-blog.csdnimg.cn/direct/9fafa54d114b41eeb2a2ce623a53c2f1.png
https://i-blog.csdnimg.cn/direct/03a9042b51b54b79980aa6d7f3814c6a.png
https://i-blog.csdnimg.cn/direct/dcaf0113c9e04e5880d816934127586f.png
https://i-blog.csdnimg.cn/direct/9a56f1200ef049f682a045499354a9df.png
https://i-blog.csdnimg.cn/direct/c36f12a6a5d6474aaf632d2341e99a13.pnghttps://i-blog.csdnimg.cn/direct/d158c34daad84ee8bae0138bdc90b4e5.png
https://i-blog.csdnimg.cn/direct/72e9e923082a4a0ab8c3fc2a637e7e35.png
https://i-blog.csdnimg.cn/direct/a2a379d472424ed9b4e74596766b6fdd.png
https://i-blog.csdnimg.cn/direct/efa7c7568a1f4dd685101296043f72cd.png
因此,需要将doc转docx,我盼望只读取二级文件夹里我需要的那个docx。(实际最后,一级文件里所有的doc都转成docx了。不是只转换二级文件夹里的docx。)
https://i-blog.csdnimg.cn/direct/5a56e5324cd34684ad4d24ded9fb0199.pnghttps://i-blog.csdnimg.cn/direct/caf5039397184d89821f6d723f191494.png
给docx文件前面写上序号01,确保PDF也能排序(厥后发现一些参考文件的doc也转pdf了,所以必须写上01序号,才能让这些PDF排列在前面,便于选择前11个pdf归并)
https://i-blog.csdnimg.cn/direct/72b5cbd66c974134a23f34e426a3053c.png
https://i-blog.csdnimg.cn/direct/9454aff4f7f74e28a072e3ca71f64c1a.png
3、确保每个DOCX都是双数页(,这样PDF归并后,每个word的标题照旧都能在奇数页上。来不及写代码了,我都是手动添加换页符)
(1)所有DOCX打开,
https://i-blog.csdnimg.cn/direct/f2abdf01e9804cdd840ea2515a5182c3.png
(2)如果是单数页,再最后一页手动按一个换页符。CTrl+Enter
https://i-blog.csdnimg.cn/direct/86c73bfe8f0f4e67bdfc1c217c8e36b5.png
https://i-blog.csdnimg.cn/direct/83d68251427a45149e64acf8be8ad272.png
(3)如果是双数页,就关闭
https://i-blog.csdnimg.cn/direct/8f496dc898d04d4ea683ba46f9e0019a.png
这样就能确保归并打印时,每个有标题的页面都在奇数页上
https://i-blog.csdnimg.cn/direct/7217ccac9a51451dab999d8933a9c34a.png
https://i-blog.csdnimg.cn/direct/564ff8e5f9bc44c6b4c78bdc07064935.png
https://i-blog.csdnimg.cn/direct/e1bd6c046be84a73a698a9dcd08e7565.png
代码展示:
这是上学期的代码 03 第一学期,读取前11个pdf归并
https://i-blog.csdnimg.cn/direct/71ab11faa56e404e9ce2da00c0ea078b.png
import os
from docx import Document
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from PyPDF2 import PdfFileMerger, PdfFileReader
import time
from docx2pdf import convert
import comtypes.client
# 初始化 Word 应用程序
word = comtypes.client.CreateObject('Word.Application')
word.Visible = False
# 指定包含 DOC 文件的文件夹路径
path=r"D:\课题"
m="3"
n="一"
input_folder =path+fr"\0{m} 第{n}学期"
# input_folder =path+r"04 第二学期"
# 遍历输入文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(input_folder):
for file in files:
if file.endswith('.doc'):
doc_file = os.path.join(root, file)
docx_file = os.path.join(root, f"{os.path.splitext(file)}.docx")
# 打开 DOC 文件并保存为 DOCX 文件
doc = word.Documents.Open(doc_file)
doc.SaveAs(docx_file, FileFormat=16)# FileFormat=16 表示 DOCX 格式
doc.Close()
print(f"Converted {doc_file} to {docx_file}")
# 关闭 Word 应用程序
word.Quit()
import os
import time
from docx2pdf import convert
# 指定包含 DOCX 文件的文件夹路径
# input_folder = r"D:\课题\03 第一学期"
# 指定输出 PDF 文件的文件夹路径
output_folder = input_folder+r"\12 PDF合集"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 遍历输入文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(input_folder):
docx_files =
if docx_files:
for docx_file in docx_files:
docx_file_path = os.path.join(root, docx_file)
pdf_file_name = f"{os.path.splitext(docx_file)}.pdf"
pdf_file_path = os.path.join(output_folder, pdf_file_name)
convert(docx_file_path, pdf_file_path)
print(f"Converted {docx_file_path} to {pdf_file_path}")
time.sleep(3)# 给转换一些时间间隔,避免过快导致失败
# 最后把PDF合并
import os,time
from PyPDF2 import PdfMerger, PdfFileReader
# 创建一个PdfMerger对象
merger = PdfMerger()
# 获取输出文件夹中的所有PDF文件
pdf_files =
# 遍历所有的PDF文件并合并()
for filename in pdf_files[:11]:
pdf_path = os.path.join(output_folder, filename)
with open(pdf_path, 'rb') as pdf_file:
pdf_reader = PdfFileReader(pdf_file)
merger.append(pdf_reader)
# 保存合并后的PDF文件
output_path = os.path.join(input_folder,f"0{m} 第{n}学期合并打印.pdf")
merger.write(output_path)
merger.close()
print("PDF文件合并完成!")
import shutil
shutil.rmtree(output_folder)
归并后我发现,除了我需要的二级文件夹里的docx,在一级文件夹里的docx(与二级文件夹同级,赤色部分文件)也被PDF了。
https://i-blog.csdnimg.cn/direct/04b4f2a88a3f4948b916c6c7a38e89b6.png
https://i-blog.csdnimg.cn/direct/f43ba02cbabb498298534e3fad3f8e89.png
https://i-blog.csdnimg.cn/direct/af440ba947bc42688f05d852b8eba61c.png
所以我给每个需要的docx文件进行编号(01-11)只提取有序号的前11个PDF文件归并(文件名的数字首字排在前面,字母首字排中间,汉字首字最后)
https://i-blog.csdnimg.cn/direct/a93fa2652baa4970b66030042fbd4812.png
https://i-blog.csdnimg.cn/direct/99bac7e38d4e467180301a29e2c32306.png
https://i-blog.csdnimg.cn/direct/4f2a934f24104e828b86dd0f36077a34.png
https://i-blog.csdnimg.cn/direct/ca5d0d871c894a4e97b9766c85497ef9.png
(第一个学期的所有PDF,只提取有序号的前11个pdf归并)
https://i-blog.csdnimg.cn/direct/30dfcd999f1d4fa9b289292a93d78e35.png
提取前11个pdf归并(就是有数字序号的11个)
https://i-blog.csdnimg.cn/direct/c8bbc4432bfa49759d8adf6c7faa793b.png
最后效果
https://i-blog.csdnimg.cn/direct/7fc9d7536ab9430b81f31ac007e474aa.png
--------------题外话---------------
我发现括号排在数字前面,但是归并前11个文档时,并没有这个括号首字的文件。
那么数字、字母、汉字和符号怎么排序呢?
https://i-blog.csdnimg.cn/direct/0d15d021281442788ea8b9569fdb8344.png
以下这篇文章提到了一些排法。
https://www.zhihu.com/question/20227012/answer/2584107682https://csdnimg.cn/release/blog_editor_html/release2.3.7/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=O83Ahttps://www.zhihu.com/question/20227012/answer/2584107682https://i-blog.csdnimg.cn/direct/fb9a8ee05d164b0e8168e9e2dc094dc3.png
符号首字简直在数字首字前面。但是为什么最后没有被算成第一个PDF文件?
https://i-blog.csdnimg.cn/direct/9dbda0233bdd4318973a1ce1e593e967.png
后续再研究看看怎么回事
--------------------------------------------------------------------------------------------
(第二学期的所有PDF,提取有序号的前10个pdf归并,没有申请书了。所以少一个)
https://i-blog.csdnimg.cn/direct/5286486f358f4635968b13d18a60f4d7.png
https://i-blog.csdnimg.cn/direct/efd356539fd2461588f616f6c7db4973.png
提取前10个PDF归并(有数字序号的)
https://i-blog.csdnimg.cn/direct/f644e2c95c5944f18bfdccdd8e9a0633.png
https://i-blog.csdnimg.cn/direct/6859a951f750467d84bea0033570dae6.png
打印情况
桌面文件
https://i-blog.csdnimg.cn/direct/e3baa26406134ad4ab820e4f05ed6fcd.png
第一学期PDF
https://i-blog.csdnimg.cn/direct/9ebaf1ae0b3944abbcb3dd7ae19831fe.png
108页。正反54张(01的申请书不用打印,实际打印86张)
https://i-blog.csdnimg.cn/direct/57f9c18625854a1593c3bdd80f82367e.pnghttps://i-blog.csdnimg.cn/direct/2924fcdeea514bf6bc062f63d383de0e.png
第二学期PDF102页。正反51张
https://i-blog.csdnimg.cn/direct/c50ee00a18cf46d5b5b69bfdef31f956.pnghttps://i-blog.csdnimg.cn/direct/2c257372c1c040f2876686830052e1eb.png
打印和作品展示:
彩色双面打印机(不用翻页真的好方便)
https://i-blog.csdnimg.cn/direct/0e4f5a28397e4cc8aad2b3fa5a66bd1b.pnghttps://i-blog.csdnimg.cn/direct/f405749d17484dfb96a89a80f97d9d01.pnghttps://i-blog.csdnimg.cn/direct/cbc6ca64625946d084457b5478b81dd2.pnghttps://i-blog.csdnimg.cn/direct/ee372a740234455db2ba2b6d0f006e29.pnghttps://i-blog.csdnimg.cn/direct/53c33c2f11f248ea9e695c65b2ebd5bf.png
https://i-blog.csdnimg.cn/direct/fbbf6c3b15924ef79ec1b22eabd42ee0.pnghttps://i-blog.csdnimg.cn/direct/db6d7890c0b14beea1af0da0524eec2d.png
说明:
1、word转PDF打印后的笔墨边距会比用word直接打印的纸张小0.2CM的边距,但是不细致看,看不出差别。
2、由于PDF板式固定,不用担心图片移动,破坏布局,打印便利。
最后放在文件袋里上交
https://i-blog.csdnimg.cn/direct/34f9e634c68645b4968e81d5ec5f2478.png拖了好久的任务终于完成了,大大松口气!(* ̄︶ ̄)
https://i-blog.csdnimg.cn/direct/e52fa212237f4642ac2b137cd038f271.png
感悟:
1.python技能提升时间效率,节省人工消耗。
2.python能反复调试生成pdf,实现快速归并,大大优化和进步精确率,减少返工。
今年带班后,很多条线任务都没有提早做、也没有准时完成,都是延后的,搞得很焦虑。下次照旧要逼自己抓紧时间!抓紧时间!抓紧时间!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]