Open GoodERPJeff opened 7 years ago
实际上现在就是支持的,文档正文部分用 {{ obj.company_id.logo|picture }} 可以显示图片,只是页眉页脚不识别。是docxtpl的缺陷
暂晒是只发现&符号会报错,*和#都可以正常打印
docxtpl 支持 页眉页脚 显示图片 只是写法麻烦了点 https://github.com/elapouya/python-docx-template/blob/master/tests/header_footer_image.py 对应ISSUE 回答 https://github.com/elapouya/python-docx-template/issues/51
其实还是没搞懂该怎么玩。 要不静静以其他出库单为例做个模板?页眉上加个当前公司logo的图片
嗯,不忙了,我看看
tpl = DocxTemplate(misc.file_open(report.template_file).name)
# 2016-11-2 支持了图片
# 1.导入依赖,python3语法
# 2. 需要添加一个"tpl"属性获得模版对象
tpl.replace_media('/Users/yuan/myerp/test/gooderp_addons/money/template/picture.jpg',
'/Users/yuan/myerp/test/gooderp_addons/report_docx/picture_hearder.jpg')
tpl.render({'obj': data, 'tpl': tpl})
tpl.save(temp_out_file)
money.order.get.docx 收款单 (6).docx 页眉页脚图片和正文 插入图片还是有差异的 只能用替换的方式(另外要更新到最新的 docxtpl 这个最新版,好像是没有更新到pip 手动安装的 版本 0.47 )
tpl.replace_media('/Users/yuan/myerp/test/gooderp_addons/money/template/picture.jpg', '/Users/yuan/myerp/test/gooderp_addons/report_docx/picture_hearder.jpg')
这句,后面替换成当前公司的logo,怎么写?
另外,前面的是绝对路径,那换个电脑不就没用了?
font{
line-height: 1.6;
}
ul,ol{
padding-left: 20px;
list-style-position: inside;
}
请问这是什么邮件,为什么我一直会收到~
在2018年04月10日 20:58,开阖软件 Jeff Wang<notifications@github.com> 写道:
tpl.replace_media('/Users/yuan/myerp/test/gooderp_addons/money/template/picture.jpg', '/Users/yuan/myerp/test/gooderp_addons/report_docx/picture_hearder.jpg') 这句,后面替换成当前公司的logo,怎么写?
—You are receiving this because you are subscribed to this thread.Reply to this email directly, view it on GitHub, or mute the thread.
a#ntes-pcmail-signature-default:hover {
text-decoration: underline;
color: #3593db;
cursor: pointer;
}
可以替换掉的。。这么写只是验证解决思路可行。抽时间,再整理下
@jinja2.contextfilter
def picture_header(ctx, data, width=None, height=None, align=None):
"""
把图片的二进制数据(使用了base64编码)转化为一个docx.Document对象
data:图片的二进制数据(使用了base64编码)
width:图片的宽度,可以为:'12cm','12mm','12pt' 等,参考前面的 calc_length()
height:图片的长度,如果没有设置,根据长度自动缩放
align:图片的位置,'left','center','right'
"""
if not data:
return None
# 转化为file-like对象
# 在python2.7中,bytes==str,可以直接使用
# 在python3.5中,bytes和str是不同的类型,需要使用base64这个库
# data使用了base64编码,所以这里需要解码
data = data.decode('base64')
#
# import io
# data = io.BytesIO(data)
def generate_temp_file(tempname, suffix='docx'):
return os.path.join(tempname, 'temp_%s_%s.%s' %
(os.getpid(), random.randint(1, 10000), suffix))
tpl = ctx['tpl']
tempname = tempfile.mkdtemp()
temp_out_file = generate_temp_file(tempname, suffix='jpg')
with open(temp_out_file, 'wb+') as picture:
picture.write(data)
path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
tpl.replace_media(path + '/GoodERP_AD.gif', temp_out_file)
return ''
def get_env():
"""
创建一个jinja的enviroment,然后添加一个过滤器
"""
jinja_env = jinja2.Environment()
jinja_env.filters['picture_header'] = picture_header
return jinja_env
操作系统及版本:
重现问题的步骤:
新建产品 A&B
新建其他入库单,该产品入2件
打印其他入库单
...
当前结果:
报错
截图:
期望的结果:
正常打印输出docx文件