【办公类-47-02】20250103 课题资料快速打印(单个docx转PDF,多个pdf归并 ...

打印 上一主题 下一主题

主题 805|帖子 805|积分 2425


背景需求:

2023区级大课题《运用Python优化3-6岁幼儿学习运动质料的实践研究》需要做阶段资料

原来应该2024年6月就提交电子稿和打印稿。可是python学具的教学实验着实太多了,不断生成,我忙着做教学,都没有精力去整理。

2025年1月3日,是2024区级大课题阶段资料上交的时期,科研主任让我必须上交存档了。

于是我花了一周终于把资料贴好了(成果太多了,都不知道用那份好),提交电子稿。同时需要打印成纸稿。





存在问题:

1.需要打印的每个Word文件都在单独的文件夹里,每次打印都需要打开一个文件夹,然后打开Word,再打印,打印时要选择参数(双面打印等)


2.最后还需要把打印出来的纸稿按照次序排列。调解正反面。这需要查对目录。也泯灭时间。




解决思绪

写的已经很累了,不想在打印整理上费脑子。我想做成一个PDF归并打印。直接就获取整理好次序的纸稿。

1、把单个Word转成pdf

2、把所有pdf按照次序归并在一个pdf内


解决方式:

1、Word都是doc文件,需要转成docx。

2、每个文件夹里的docx有1个(课题文档),或多个(一些参考资料),但只有1个docx是需要的










因此,需要将doc转docx,我盼望只读取二级文件夹里我需要的那个docx。(实际最后,一级文件里所有的doc都转成docx了。不是只转换二级文件夹里的docx。)


给docx文件前面写上序号01,确保PDF也能排序(厥后发现一些参考文件的doc也转pdf了,所以必须写上01序号,才能让这些PDF排列在前面,便于选择前11个pdf归并)





3、确保每个DOCX都是双数页(,这样PDF归并后,每个word的标题照旧都能在奇数页上。来不及写代码了,我都是手动添加换页符)

(1)所有DOCX打开,


(2)如果是单数页,再最后一页手动按一个换页符。CTrl+Enter



(3)如果是双数页,就关闭


这样就能确保归并打印时,每个有标题的页面都在奇数页上













代码展示:

这是上学期的代码 03 第一学期,读取前11个pdf归并


  1. import os
  2. from docx import Document
  3. from reportlab.lib.pagesizes import letter
  4. from reportlab.pdfgen import canvas
  5. from PyPDF2 import PdfFileMerger, PdfFileReader
  6. import time
  7. from docx2pdf import convert
  8. import comtypes.client
  9. # 初始化 Word 应用程序
  10. word = comtypes.client.CreateObject('Word.Application')
  11. word.Visible = False
  12. # 指定包含 DOC 文件的文件夹路径
  13. path=r"D:\课题"
  14. m="3"
  15. n="一"
  16. input_folder =path+fr"\0{m} 第{n}学期"
  17. # input_folder =path+r"04 第二学期"
  18. # 遍历输入文件夹中的所有文件和子文件夹
  19. for root, dirs, files in os.walk(input_folder):
  20.     for file in files:
  21.         if file.endswith('.doc'):
  22.             doc_file = os.path.join(root, file)
  23.             docx_file = os.path.join(root, f"{os.path.splitext(file)[0]}.docx")
  24.             
  25.             # 打开 DOC 文件并保存为 DOCX 文件
  26.             doc = word.Documents.Open(doc_file)
  27.             doc.SaveAs(docx_file, FileFormat=16)  # FileFormat=16 表示 DOCX 格式
  28.             doc.Close()
  29.             print(f"Converted {doc_file} to {docx_file}")
  30. # 关闭 Word 应用程序
  31. word.Quit()
  32. import os
  33. import time
  34. from docx2pdf import convert
  35. # 指定包含 DOCX 文件的文件夹路径
  36. # input_folder = r"D:\课题\03 第一学期"
  37. # 指定输出 PDF 文件的文件夹路径
  38. output_folder = input_folder+r"\12 PDF合集"
  39. # 确保输出文件夹存在
  40. os.makedirs(output_folder, exist_ok=True)
  41. # 遍历输入文件夹中的所有文件和子文件夹
  42. for root, dirs, files in os.walk(input_folder):
  43.     docx_files = [file for file in files if file.endswith('.docx')]
  44.     if docx_files:
  45.         for docx_file in docx_files:
  46.             docx_file_path = os.path.join(root, docx_file)
  47.             pdf_file_name = f"{os.path.splitext(docx_file)[0]}.pdf"
  48.             pdf_file_path = os.path.join(output_folder, pdf_file_name)
  49.             convert(docx_file_path, pdf_file_path)
  50.             print(f"Converted {docx_file_path} to {pdf_file_path}")
  51.             time.sleep(3)  # 给转换一些时间间隔,避免过快导致失败
  52. # 最后把PDF合并
  53. import os,time
  54. from PyPDF2 import PdfMerger, PdfFileReader
  55. # 创建一个PdfMerger对象
  56. merger = PdfMerger()
  57. # 获取输出文件夹中的所有PDF文件
  58. pdf_files = [f for f in os.listdir(output_folder) if f.endswith('.pdf')]
  59. # 遍历所有的PDF文件并合并()
  60. for filename in pdf_files[:11]:
  61.     pdf_path = os.path.join(output_folder, filename)
  62.     with open(pdf_path, 'rb') as pdf_file:
  63.         pdf_reader = PdfFileReader(pdf_file)
  64.         merger.append(pdf_reader)
  65. # 保存合并后的PDF文件
  66. output_path = os.path.join(input_folder,f"0{m} 第{n}学期合并打印.pdf")
  67. merger.write(output_path)
  68. merger.close()
  69. print("PDF文件合并完成!")
  70. import shutil
  71. shutil.rmtree(output_folder)
复制代码
归并后我发现,除了我需要的二级文件夹里的docx,在一级文件夹里的docx(与二级文件夹同级,赤色部分文件)也被PDF了。






所以我给每个需要的docx文件进行编号(01-11)只提取有序号的前11个PDF文件归并(文件名的数字首字排在前面,字母首字排中间,汉字首字最后





(第一个学期的所有PDF,只提取有序号的前11个pdf归并)


提取前11个pdf归并(就是有数字序号的11个)


最后效果


--------------题外话---------------

我发现括号排在数字前面,但是归并前11个文档时,并没有这个括号首字的文件。


那么数字、字母、汉字和符号怎么排序呢?


以下这篇文章提到了一些排法。
https://www.zhihu.com/question/20227012/answer/2584107682
https://www.zhihu.com/question/20227012/answer/2584107682

符号首字简直在数字首字前面。但是为什么最后没有被算成第一个PDF文件?


后续再研究看看怎么回事

--------------------------------------------------------------------------------------------
(第二学期的所有PDF,提取有序号的前10个pdf归并,没有申请书了。所以少一个)



提取前10个PDF归并(有数字序号的)



打印情况

桌面文件


第一学期PDF


108页。正反54张(01的申请书不用打印,实际打印86张)


第二学期PDF102页。正反51张




打印和作品展示:

彩色双面打印机(不用翻页真的好方便)



说明:

1、word转PDF打印后的笔墨边距会比用word直接打印的纸张小0.2CM的边距,但是不细致看,看不出差别。

2、由于PDF板式固定,不用担心图片移动,破坏布局,打印便利。



最后放在文件袋里上交

拖了好久的任务终于完成了,大大松口气!(* ̄︶ ̄)




感悟:

1.python技能提升时间效率,节省人工消耗。

2.python能反复调试生成pdf,实现快速归并,大大优化和进步精确率,减少返工。


今年带班后,很多条线任务都没有提早做、也没有准时完成,都是延后的,搞得很焦虑。下次照旧要逼自己抓紧时间!抓紧时间!抓紧时间!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表