python-docx 多个图片放在一行或者多行

概要

最近有个活,想要python进行自动化,每周一次,往word里面插入图片、表格,翻翻 python-docx 官方文档 感觉挺简单的,以下为大概流程

整体架构流程

  1. 什么环境、linux/win
  2. 考虑怎么得到数据,从哪得到,什么方式
  3. 是否数据加工、在什么层面加工、在数据库层面还是python代码
  4. 需要什么样的东西、绘图、三线表之类的
  5. 放在什么地方跑、是否有限制条件
  6. 多久跑一次、需要跑多久

疑难点

  • 数据处理 pandas
  • 在插入图片的时候想让一张或者多张图片在一行
  • linux 环境 绘图 不显示以及中文乱码
  • 调度问题 每天掉,文件仅在每周周一生成

技术细节

在插入图片的时候想让一张或者多张图片在一行**

# 图片地址
pic_list= ['123.jpg','123.jpg','234.jpg','123.jpg']
# 向上取整 
ceil = math.ceil(len(pic_list)/2)
# 生成一个ceil行2列的表格,保证表格数量 > 图片数量
table = word.add_table(rows=2, cols=2)

# 对表格进行枚举
for i,cell in enumerate(table._cells):
	# 这个地方尤其注意 必须先拿到 paragraph 对象 才能run
    run = cell.add_paragraph().add_run()
    run.add_picture(pic_list[i], width=Inches(2.25))

实例:
在这里插入图片描述

该处有几个小地方

  1. 原本考虑图片不落地,直接转成流 传过来,然后写入,但发现linux环境 在绘制的时候总会报错 seek(0) ,并且考虑到后续维护,就取消了该想法
  2. 当图片的长度小于表格的时候,建议使用 try 方法去捕获,或者直接用 zip 拉链函数,这样也不会报错
  3. 注意调整word 的边距 以及图片大小,不然显示不完全

linux 环境 绘图 不显示以及中文乱码

把windows10环境下的中文字体拷贝到Linux系统中。
windows10字体默认文件夹为C:\Windows\Fonts。
挑选一个喜欢的 我这里用的simkai.ttf

import matplotlib
# 拿到
print(matplotlib.matplotlib_fname())

执行结果:
xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data\matplotlibrc

然后cd 到 xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data
目录下

cd xxx\envs\demo_env_learn\lib\site-packages\matplotlib\mpl-data
mv simkai.ttf fonts/ttf/simkai.ttf 

清除用户目录的缓存即可

rm -rf .cache

放在什么地方跑、是否有限制条件

linux 环境运行 考虑调度 crontab 将python 文件 用shell 包一层 方便获取 执行日志 也方便考虑传值问题

调度问题 每天掉,文件仅在每周周一生成

在python 代码中限制 当且仅当 传入的数据日期 和 为周1 的时候执行

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值