感谢:Odoo中利用python的Docxtpl模块生成word附件 - 灰信网(软件开发博客聚合) (freesion.com)这篇文章那个,我在做任务的时候这篇文章给我了一条生路。

现在我对word打印任务做个总结。

首先,需要做一个需要打印的word模块,上连接:Python 使用DocxTemplate模板实现将数据写入word中 - NoName-Newbee - 博客园 (cnblogs.com),我看很多方法中都是直接在电脑本地拿模板,我需要做的是在系统中拿到这个模板,所以需要将做好的word模板上传到系统的附件中(设置-技术-附件,点击创建按钮,上传你的文件即可)

odoo中大部分打印都是在动作旁边的打印按钮,点击之后走.xml文件中的template然后打印出pdf格式的文件,但是我不会用这个方法打印word格式的文件,所以我就将打印做成了按钮放在页面上,让他执行.py文件中的方法,关键就是.py文件中的方法。

下载docxtpl依赖包,这里就不说明了,我使用的是0.16.4版本。

在方法中的第一步就是拿到系统中上传的附件模板,这里就很好拿了attachment = self.env['ir.attachment'].search([('name','=','XXXXXX')]),系统中的附件都都存在ir.attachment模型中然后根据他的name拿上传的数据附件就是其中的datas字段,但是拿到附件(attacment.datas)之后这里根本就是一堆乱码这样没法做到渲染,这就需要解码,attachment_datas=base.b64decode(attachment.datas)(这里需要引进依赖包import base64),attachment_datas是解码之后的数据,但是解码之后也不能直接渲染,因为这个数据也是一堆乱码不是一个word文件,所以我们需要把乱码存到虚拟目录中。

创建虚拟目录:with tempfile.TemporaryDirectory() as tmpdirname:我这里报错了所以我在这一行的下边做了个print(tmpdirname),然后docx_path=tmpdirname + str(uuid.uuid4())+'.docx',docx_path就是虚拟目录的路径,uuid是生成一串随机数据具体功能忘记了反正就是为了防止路径重复,需要引入依赖吧(import uuid)。

做了虚拟目录之后将解码的文件发放到虚拟目录中:with open(docx_path ,'wb') af f :f.write(attachment.datas),这样就把解码的文件放进生成的虚拟目录中了,可以做修改,根据虚拟目录路径拿到附件模板:in_stream = DocxTemplate(docx_path),拿到模板之后就可以对模板进行数据渲染。

举个例子,我在模板中有一个需要渲染的字段{{name}},在后端方法中就可以写成context={'name':‘狗尾巴草的可怜’},然后in_stream.reder(context),就是对in_stream进行渲染。

渲染完成之后怎么把完成的word文件取出来?

我的方法:在创建一个虚拟目录:file_dir=tmpdirname + str(uuid.uuid4())+'检测单.docx',将渲染的模块保存到虚拟目录中in_stream.save(file_dir),保存到虚拟目录中之后怎么拿到?当然是读取目录了:with open(file_dir,'rb') ad f :byte_read = f.read(),byte_read就是读取出来的文件

将读取出来的文件再次报错到系统的附件中test=self.env['ir.attachment'].create({''name“:"报错附件的名称","datas":base64.base64encode(byte_read),"res_id":self.id,"res_model":" XXXX"})

解释一波:name就是保存附件的名称;datas是附件,我们拿出来的时候转码了,这次存进去当然也要转回去;res_id是打印当前数据的id;res_model是当前打印的模型,保存到附件之后当然可以直接下载了,下载代码如下图:

解释一波: type固定写法,如果下载的话需要这个type类型;targe是在当前窗口哦下载还是新建一个窗口;url就是%后边不一样,他需要这个附件的id,之前不是已经create了吗,只需要放到这里就可以。

补充:我在做打印的时候需要将图片也打印上,在word模板文档中只需要一个{{logo}},这个代替即可。然后就是对logo的渲染。

首先需要达到图片,例如公司的logo(self.company.logo),将拿到的logo图片解码base64.b64decode(self.company.logo),将解码的图片放到虚拟目录中,创建虚拟目录img_path=tmpdirname+str(uuid.uuid4())+'.png',然后放入虚拟目录中with.open(img_path,'wb') as f:f.write(img_data),放入虚拟目录后就开始渲染,context['logo']=InlineImage(in_stream,im_path,height=Mm(20)),分析一波:InlineImage是外部依赖包的方法需要引入(from docxtpl import  InlineImage),里面有三个参数in_stream是模板存储的地址,im_path是图片的虚拟地址,height是要求渲染上的图片的高度,这好像可以不写(不清楚),Mm也需要引入外部依赖吧(from docx.shared import Mm),这样就可以将图片渲染上,注意这一步要放到render方法之前啊,别因为我写在了后边就放到后边。

上一波代码截图:

odoo中关于打印word格式的文件,利用docxtemplate方法相关推荐

  1. 如何打印Word格式的文件

    有时,Word文件编辑好了后,需要打印出来,那么怎么打印呢?以最常用的极速办公speedoffice为例. 1.首先,运行office软件,打开需要打印的Word文档: 2.然后,我们在菜单栏上找到& ...

  2. python打开word格式的文件。查找中文错别字

    你可以使用 python 的库来打开 word 格式的文件,然后查找中文错别字. 一种方法是使用 python-docx 库. 你可以在命令行中使用 pip 安装这个库: pipinstall pyt ...

  3. 如何在Photoshop中载入使用pat格式的文件?ps图案pat格式文件载入教程

    PS中有一种为"pat"后缀的ps图案模式,小编今天为大家带来了如何在Photoshop中载入使用pat格式的文件?ps图案pat格式文件载入教程,有需要的小伙伴快来看看吧! 在桌 ...

  4. 计算机pdf转换word,电脑pdf改成word格式,值得收藏的方法!

    首页>频道页>电脑pdf改成word格式,值得收藏的方法! 电脑pdf改成word格式,值得收藏的方法! 2020-12-04 转易侠PDF转换器 马上下载 电脑pdf改成word格式,值 ...

  5. 计算机无法使用打印机预览,电脑中excel打印预览无法查看的处理方法

    我们在处理数据时,经常都会使用到excel应用.不过,最近一位用户反馈自己电脑中excel的打印预览突然无法查看了.这是怎么回事呢?我们要如何操作?接下来,就随系统城小编一起看看该问题的解决方法吧! ...

  6. 基于WEB的Office文档打印——浏览器中静默打印Word文档

    web应用开发中,如何集成Office文档打印功能,并不是一个容易实线的问题.现在有了打天下web打印插件,仅以几行JS代码就可以让你将Office打印功能集成到你的Web项目中. 引入PrintWo ...

  7. et文件怎么转成excel_excel怎么转换成word格式的文件格式?这些方法应该掌握!...

    制作数据调查表的时候,不仅要有数据统计图,还要有文字总结,和调查结果等.但是直接将excel表格复制到word文档,完全行不通,乱码现象都没眼看.但我们也不能否定"复制"这一方法, ...

  8. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...

  9. Android系统中如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在Android平台下,办公系统,ERP,CRM等开发过程中,需要对Doc, docx, xls, xlsx, ppt, ppts, pdf, html等各种格式的文件内容进行搜索和查找,实现这些格式 ...

最新文章

  1. python 3d绘图平面_python 用 matplotlib 在 3D 空间中绘制平面 实例详解
  2. a标签禁止点击_Nofollow标签的使用
  3. 武大94年暖男型博士入选华为“天才少年”计划,最高年薪201万
  4. 诗与远方:无题(九十)
  5. 红橙Darren视频笔记 数据库操作优化 数据查询(数据库操作)中
  6. 评教数据的存储和显示问题
  7. java 字符串加密解密_Java加密解密字符串
  8. cad快看_CAD快速看图可以图纸对比吗?可以!
  9. 软件开发部分文档说明
  10. 你必备的39个大数据可视化工具
  11. 怎么批量删除 Word、PPT、PDF 中的第一页、最后一页以及其它指定页?
  12. 一键开关电路设计(一)
  13. 虚拟机VirtualBox下载与安装、安装Ubuntu超详细图文步骤,对一些配置问题也有所写。
  14. iqooz6和z5哪个好 iqoo z6和iqoo z5哪个更值得入手
  15. javaScript中console.log()的用法
  16. 完全卸载oracle|oracle卸载|彻底卸载oracle
  17. facade设计模式
  18. wps合并多个pdf,四个步骤轻松解决
  19. Atom 编辑器基本使用介绍
  20. 为什么炒期货风险高(炒期货比炒股风险更高吗)

热门文章

  1. SAP-FI-税码维护
  2. 市场对计算机应用技术的需求,计算机应用技术专业人才需求调研分析
  3. excel 如何超链接到另一个工作薄下查找相同字符数据
  4. 利用微软Text-To-Speech朗读文本
  5. 苹果icloud登录_如何在Windows电脑上使用苹果iCloud服务?
  6. NOC2021年测试卷3
  7. 电子书产品日趋丰富,科大讯飞智能办公本仍是理想之选
  8. 使用python绘制函数曲线
  9. Turtle 画方形 画圆 画三角形
  10. Python基础知识——变量与运算符