当前位置: 首页 > news >正文

【办公类-18-07】20251215(Python)“口腔检查涂氟信息”批量生成打印(区名、学号、姓名、学校、班级、身份证、户籍、性别、民族)

背景需求

本学期的涂氟单来了,需要手写幼儿信息

上学期做了中2班的涂氟单

办公类-18-06】20250523(Python)“口腔检查涂氟信息”批量生成打印(学号、姓名、学校、班级、身份证、户籍、性别、民族)https://mp.csdn.net/mp_blog/creation/editor/148175578

代码拿来复制一份

去年打印后,模版的位置有不同,所以今年需要再重新调整一下文本框的位置

一、扫描图片

二、新的模版贴入WORD内

制作有背景模版,并调整文本框位置(上移几下)

去掉背景,变成无背景模版

班级幼儿信息

读取EXCLE,填写WORD文字占位符,制作PDF

# -*- coding:utf-8 -*- ''' 目的:口腔检查涂氟单(一个班级单独打印) 作者:deepseek,阿夏 日期:20251215 ''' # 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹 from docxtpl import DocxTemplate import pandas as pd import os import time # numnum = int(input('请输入班级号(如4):\n')) l = 2 # int(input('1、有背景图、2、无背景图\n')) zpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\20251215口腔涂氟' + "\\" file_path = zpath + r'\零时Word' # 二、遍历excel,逐个生成word(form.docx是前面的模板) try: os.mkdir(file_path) except: pass # 读取Excel文件 IDcard = pd.read_excel(zpath + '名字虚拟.xlsx') # 获取总人数(不包括标题行) total_people = IDcard.shape[0] print(f"Excel中共有 {total_people} 人") num = IDcard["num"] name = IDcard["name"] school = IDcard["school"] classroom = IDcard["classroom"] # 去掉换行符 y = IDcard["y"] m = IDcard["m"] d = IDcard["d"] ID = IDcard["ID"] SH = IDcard["SH"] FSH = IDcard["FSH"] M = IDcard["M"] F = IDcard["F"] dis=IDcard["dis"] # 尝试这样读取 nation = IDcard["nation"] # 遍历excel行,逐个生成 for i in range(total_people): # python print(IDcard["nation"].head()) # 查看前几行nation数据 print(IDcard["nation"][i]) # 在循环内打印当前处理的nation值 context = { "num": str(num[i]), "dis":dis[i], "name": name[i], "school": school[i], "classroom": classroom[i], "y": y[i], "m": m[i], "d": d[i], "ID": ID[i], "SH": SH[i], "FSH": FSH[i], "M": M[i], "F": F[i], "nation": nation[i], } if l == 1: tpl = DocxTemplate(zpath + '打印单字(有背景).docx') elif l == 2: tpl = DocxTemplate(zpath + '打印单字(无背景).docx') tpl.render(context) tpl.save(file_path + fr'\{num[i]:02}.docx') from docx2pdf import convert # docx 文件另存为PDF文件 inputFile = file_path + fr'\{num[i]:02}.docx' outputFile = file_path + fr'\{num[i]:02}.pdf' # 先创建不存在的文件 f1 = open(outputFile, 'w') f1.close() # 再转换往PDF中写入内容 convert(inputFile, outputFile) time.sleep(2) print('----------第4步:把都有PDF合并为一个打印用PDF------------') # 多个PDF合并 import os from PyPDF2 import PdfFileMerger target_path = file_path pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')] pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst] pdf_lst.sort() file_merger = PdfFileMerger() for pdf in pdf_lst: print(pdf) file_merger.append(pdf) if l == 1: file_merger.write(zpath + fr'\(测试){classroom[0]}班涂氟单({total_people}人)(虚拟有背景图).pdf') elif l == 2: file_merger.write(zpath + fr'\测试{classroom[0]}班涂氟单({total_people}人)(虚拟无背景图).pdf') file_merger.close() print('----------第5步:删除临时文件夹------------') import shutil shutil.rmtree(file_path) #递归删除文件夹,即:删除非空文件夹

虽然看上去占位符和图片背景是对应了,但是实际打印不一样,所以为了调整位置,我反复打印了无数次。

一分园电脑,需要正面(打印面)向下,题目向上

打印1张,做测试。文字全部靠下了,需要向上调整

反复调整位置,打印了多次。

分园的电脑自定义尺寸只能设置一个,要么是15*15,要么是14*21CM,我用适合打印边距、实际大小、自定义105%都打印了一次

结果,文字都没有在横线上,都在横线下面。所以还是去总园用扫描仪扫描图片。做正确的模版

总园大班电脑,

我已经忘记了纸张正面摆放,搜索CSDN看看原来的记录

总园大班打印机的纸张摆放形式:正面(打印面)向上,标题向左。

不断测试:

1、一定要选择自定义的纸张尺寸(原来设置过的,有记录)

存在问题:男孩的单子上面,女部分写了nan

因为这里的空里面是完全空,没有一个空格,就会显示nan

如果添加了公式,内部就不是空,就不会打印任何内容

重新做了一份,没有nan

我做了一套有背景的范例

# -*- coding:utf-8 -*- ''' 目的:口腔检查涂氟单(一个班级单独打印) 作者:deepseek,阿夏 日期:20251215 ''' # 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹 from docxtpl import DocxTemplate import pandas as pd import os import time # numnum = int(input('请输入班级号(如4):\n')) l = 1 # int(input('1、有背景图、2、无背景图\n')) zpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\20251215口腔涂氟' + "\\" file_path = zpath + r'\零时Word' # 二、遍历excel,逐个生成word(form.docx是前面的模板) try: os.mkdir(file_path) except: pass # 读取Excel文件 IDcard = pd.read_excel(zpath + '名字虚拟.xlsx') # 获取总人数(不包括标题行) total_people = IDcard.shape[0] print(f"Excel中共有 {total_people} 人") num = IDcard["num"] name = IDcard["name"] school = IDcard["school"] classroom = IDcard["classroom"] # 去掉换行符 y = IDcard["y"] m = IDcard["m"] d = IDcard["d"] ID = IDcard["ID"] SH = IDcard["SH"] FSH = IDcard["FSH"] M = IDcard["M"] F = IDcard["F"] dis=IDcard["dis"] # 尝试这样读取 nation = IDcard["nation"] # 遍历excel行,逐个生成 for i in range(total_people): # python print(IDcard["nation"].head()) # 查看前几行nation数据 print(IDcard["nation"][i]) # 在循环内打印当前处理的nation值 context = { "num": str(num[i]), "dis":dis[i], "name": name[i], "school": school[i], "classroom": classroom[i], "y": y[i], "m": m[i], "d": d[i], "ID": ID[i], "SH": SH[i], "FSH": FSH[i], "M": M[i], "F": F[i], "nation": nation[i], } if l == 1: tpl = DocxTemplate(zpath + '打印单字(有背景).docx') elif l == 2: tpl = DocxTemplate(zpath + '打印单字(无背景).docx') tpl.render(context) tpl.save(file_path + fr'\{num[i]:02}.docx') from docx2pdf import convert # docx 文件另存为PDF文件 inputFile = file_path + fr'\{num[i]:02}.docx' outputFile = file_path + fr'\{num[i]:02}.pdf' # 先创建不存在的文件 f1 = open(outputFile, 'w') f1.close() # 再转换往PDF中写入内容 convert(inputFile, outputFile) time.sleep(2) print('----------第4步:把都有PDF合并为一个打印用PDF------------') # 多个PDF合并 import os from PyPDF2 import PdfFileMerger target_path = file_path pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')] pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst] pdf_lst.sort() file_merger = PdfFileMerger() for pdf in pdf_lst: print(pdf) file_merger.append(pdf) if l == 1: file_merger.write(zpath + fr'\(测试){classroom[0]}班涂氟单({total_people}人)(虚拟有背景图).pdf') elif l == 2: file_merger.write(zpath + fr'\测试{classroom[0]}班涂氟单({total_people}人)(虚拟无背景图).pdf') file_merger.close() print('----------第5步:删除临时文件夹------------') import shutil shutil.rmtree(file_path) #递归删除文件夹,即:删除非空文件夹

http://www.cnnetsun.cn/news/71119.html

相关文章:

  • HTTP网络巩固知识基础题(2)
  • Windows三指拖拽终极指南:从零配置到精通使用
  • Tsuru容器网络性能实战解析:从架构原理到生产优化
  • HunyuanVideo-Foley支持百度云盘镜像下载,加速全球分发
  • 5分钟搞定Vue项目Office文档预览:零配置组件库终极指南
  • IDEA阅读插件:在开发环境中打造专属阅读空间
  • 【终极方案】突破限速:百度网盘高速下载全攻略
  • Screen Translator终极指南:智能屏幕翻译助手完整教程
  • MFC用高精度计时器实现五段时序控制器
  • Dify插件开发指南:集成自定义PyTorch模型的方法
  • Windows11安装isaac-sim-4.5.0和isaaclab
  • MTKClient实战指南:联发科芯片调试与设备救援全解析
  • Linux系统编程2(进程)
  • 零基础网络安全完全自学指南:从入门到精通的系统性路线图
  • B站视频转文字神器:3步搞定视频内容提取的终极指南
  • 浏览器串口工具革命:零安装体验硬件调试新时代
  • 将DataFrame转换为列表
  • ZeroOmega代理管理:3分钟掌握浏览器智能代理的完整指南
  • 27、实用awk程序大揭秘
  • Reactor Core终极指南:掌握JVM高性能异步编程核心技术
  • Linux网络编程之封装Socket模块现实意义和价值
  • LangChain输出解析器提取Qwen-Image-Edit-2509编辑指令结构
  • Python字典的`==`操作:从表面相等到深度洞察
  • 3步完成数据库升级:从SQLite到MySQL的智能迁移方案
  • 基于Spring Boot+Vue的电子政务服务管理系统
  • HunyuanVideo-Foley + Git 工作流整合:实现自动化音效生成CI/CD
  • Java开发场景下AI代码生成技术实测报告:效率与安全性双重验证
  • 力扣刷题知识点总结
  • 寻找两个正序数组的中位数:思路与实现
  • 商业广告音效定制避坑指南:3分钟搞懂版权费用与隐藏成本