由于业务需要打印报表时需要预览检查,所以使用的在浏览器直接查看报表后,再进行打印,结果出现如下问题:
使用模块地址:https://apps.odoo.com/apps/modules/12.0/prt_report_attachment_preview/
Traceback (most recent call last):
File "E:\Odoo12\python\lib\site-packages\werkzeug\serving.py", line 205, in run_wsgi
execute(self.server.app)
File "E:\Odoo12\python\lib\site-packages\werkzeug\serving.py", line 196, in execute
write(data)
File "E:\Odoo12\python\lib\site-packages\werkzeug\serving.py", line 164, in write
self.send_header(key, value)
File "E:\Odoo12\python\lib\http\server.py", line 508, in send_header
("%s: %s\r\n" % (keyword, value)).encode('latin-1', 'strict'))
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 31-40: ordinal not in range(256) - - -
问题原因:在打印报表时候,设置文件名称为中文导致
解决:修改模块 prt_controllers.py
引入
from urllib.parse import quote
pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)),
('Content-Disposition', 'filename="%s.pdf"' % (quote(filepart)))]
quote()
传入参数类型:字符串
功能:将单个字符串编码转化为 %xx 的形式
按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。
所以 URL 中使用其他字符就需要进行 URL 编码。