import win32api
import win32print
from docxtpl import DocxTemplate
order = {
"create_time": "2023-05-08 17:21:32",
"delivery_time": "2023-05-08 17:44:24",
"express_no": "123456",
"id": 20,
"order_no": "20230508172132172912436",
"payment_time": "2023-05-08 17:44:24",
"remarks": "",
"state": 1,
"total_price": 7200,
"update_time": "2023-05-08 18:17:43.195415",
"nickname": "昵称",
"username": "手机号",
"address_name": "河南省谷南山",
"delivery_name": "啦啦啦",
"pay_status": "1",
"phone": "123456789",
"goods_list": [
{
"number": 1,
"tags": "的高度官方的",
"price": "3100.00",
"title": "的双方各嘿嘿飞哥",
"total_price": "3100.00"
},
{
"number": 1,
"tags": "胜多负少的",
"price": "4100.00",
"title": "是否是发送到发送到发送到",
"total_price": "4100.00"
}
]
}
template_path = r"订货清单模板.docx"
filename = f'订单{order.get("order_no")}.docx'
doc = DocxTemplate(template_path) # 对要操作的docx文档进行初始化
context = {
'U': order.get('nickname', order.get('username')),
'C': order.get('create_time'),
'O': order.get('order_no'),
'P': order.get('payment_time'),
'D': order.get('delivery_time'),
'E': order.get('express_no'),
'A': order.get('address_name'),
'R': order.get('delivery_name'),
'T': order.get('phone'),
'TP': order.get('total_price'),
'more': order.get('goods_list'),
} # company_name 是存在于1.docx文档里面的变量,就像这样{{company_name}},直接放在1.docx文件的明确位置就行
doc.render(context) # 这里是有jinjia2的模板语言进行变量的替换,然后便可以在1.docx文档里面看到{{company_name}}变成了World company
doc.save(filename) # 保存
win32api.ShellExecute(
0, # 指定父窗口句柄
"print", # 指定动作, 譬如: open、print
filename, # 指定要打开的文件或程序
'/d:"%s"' % win32print.GetDefaultPrinter(), # 给要打开的程序指定参数(此处为选择打印机)
".", # 缺省目录
0 # 打开选项
)
特别鸣谢:
远哥支持!!! @烟墨