如何解决加密 Odoo 附件并通过电子邮件发送
我有一个问题,在发送工资单时,系统应该检索生成的工资单,对其进行加密,然后通过电子邮件将其作为加密附件发送。
问题是,当我保存 pdf 时,它会输出一个空白文件或一个不可读的文件,并抛出错误 File type unknown (application/octet-stream) is not supported
。
我已经确认变量 `pdf[0] 实际上是字节格式的 pdf。
所以我的问题是如何将这些 pdf 数据保存到人类可读的 pdf 文件中。
这是我的python代码。 此方法将调用附有 pdf 的 odoo 发送电子邮件弹出窗口。
save_pdf_file()
函数只是获取路径并将加密的附件保存回 odoo,以便它可以作为 pdf 附加。
如果您需要额外说明,请告诉我。谢谢你们的时间。
def send_by_email(self):
for rec in self:
filename = f"{(rec.name or '').replace('/','_')}_${rec.state}"
pdf = self.env.ref(
'hr_payroll_community.action_report_payslip').render_qweb_pdf(rec.id)
_logger.info(base64.b64decode(pdf[0]))
if pdf:
#here i am testing to see if I can save the pdf but it's not working.
pdf1 = pdf[0]
pdf_path = rec.create_pdf()
with open('/home/b14/Desktop/dd.pdf','wb') as f:
f.write(base64.decodebytes(pdf1))
# add_encryption(pdf_path,pdf_path,'12345678')
pdf_id = rec.save_pdf_file(pdf_path,filename)
template_id = self.env.ref(
'send_payslips_by_email.email_template_send_payslip').id
compose_form_id = self.env.ref(
'mail.email_compose_message_wizard_form').id
ctx = dict(
default_model='hr.payslip',default_res_id=self.id,# IDK IF THIS FIELD BELOW ACTUALLY EXISTS
default_use_template=bool(template_id),default_template_id=template_id,# default_attachment_ids=[(0,pdf_id)],default_composition_mode='comment',)
return {
'name': _('Compose Email'),'type': 'ir.actions.act_window','view_type': 'form','view_mode': 'form','res_model': 'mail.compose.message','views': [(compose_form_id,'form')],'view_id': compose_form_id,'target': 'new','context': ctx,}
在此之后,有加密pdf的功能,我已经确认它可以很好地与我机器上已经保存的其他pdf一起使用。
def add_encryption(input,output,password):
pdf_writer = PdfFileWriter()
pdf_reader = PdfFileReader(input)
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
pdf_writer.encrypt(user_pwd=password,owner_pwd=None,use_128bit=True)
with open('/home/b14/Desktop/pp.pdf','wb') as f:
pdf_writer.write(f)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。