Python 的 word 占位符批量插入图片,新手..不知道代码哪里出问题

2022-04-25 20:13:50 +08:00
 jbue520
from docx import  Document
from docx.shared import Inches
import glob
from os import listdir
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


def center_insert_img(doc,img):
    """插入图片"""
    for paragraph in doc.paragraphs:
        # 根据文档中占位符定位图片插入的位置
        if '<<img1>>' in paragraph.text:
            paragraph.text = paragraph.text.replace('<<img1>>', '')
            run = paragraph.add_run('')
            run.add_break()

            run.add_picture(img, width=Inches(6.2))


def save_img_to_doc(img):
    tpl_doc = r'D:\py\归档模版.docx'
    res_doc = r'D:\py\空港.docx'

    document = Document(tpl_doc)

    center_insert_img(document,img)

    document.save(res_doc)


def main():
    path = r'C:\Users\durpa\Desktop\身份证\*.jpg'
    # img = 'C:\\Users\\durpa\\Desktop\\身份证\\75+'
    for img in glob.glob(path):
        print(img)



    save_img_to_doc(img)


if __name__ == '__main__':
    main()

代码能运行,但是只能插入一张图...还请大神指教一下..感谢

2268 次点击
所在节点    Python
13 条回复
paopjian
2022-04-25 20:43:55 +08:00
save_img_to_doc(img)得在 for 范围里
jbue520
2022-04-25 21:05:01 +08:00
@paopjian 你说的是上面的 for 还是下面的 for? 我缩进都已经做了,但是还只能插入一张图,并不能把目录下的图片全插入进去
zhzy
2022-04-25 22:16:47 +08:00
根据你的代码 main() 里面的 save_img_to_doc(img) 只运行了一次, 也就是只插入了最后一个 img
jbue520
2022-04-25 22:18:24 +08:00
@zhzy 哦,那就是 save_img_to_doc(img) 需要在做一个循环...我先试试,,感谢感谢
zhzy
2022-04-25 22:18:29 +08:00
save_img_to_doc(img) 和 print(img) 要保持一样的缩进
jbue520
2022-04-25 22:25:03 +08:00
@zhzy 已经一样的缩进了,但是却还是只插入了一张图..
kokutou
2022-04-26 07:50:47 +08:00
每运行一次 save_img_to_doc ,都把源模板 docx 插入 1 张图片,然后保存到了目标 docx 。。。
每次都是用的源模板。。。

这样说你应该懂了吧
jbue520
2022-04-26 09:50:21 +08:00
@kokutou 听是听懂了,但是菜鸟还在想怎么解决....不知道大神能否告知?
kasusa
2022-04-26 10:23:45 +08:00
是想要把 word 中所有 的<<img1>> 都换成同一张图片嘛
如果是的话,单看我是没看出来有啥问题。不过如果你需要进一步的协助,
kasusa
2022-04-26 10:24:13 +08:00
你可以把文件和代码都传到 github 上面建一个项目我下载下来试试才知道哪里有问题
jbue520
2022-04-26 14:42:13 +08:00
@kasusa 我想把文件夹里的匹配的.JPG 文件全部插入到<<img1>>,其实这部分只是我要做的事情的其中之一, 我把详细的上传到百度网盘了,代码我只实现了一部分,其他的还请大神指教 链接: https://pan.baidu.com/s/1fGIW9heQq-41AkBx53HWAg
提取码:kccx
kasusa
2022-04-26 15:34:22 +08:00
emm 我还是不管那么多了,你想往一个<<img1>>里面插入多张图片对吧,我有空了试着做做看。
而且对于 word 操作我更推荐你用 c#而不是 python ,py 的 docx 库有很多坑
jbue520
2022-04-26 15:57:29 +08:00
@kasusa 突然感觉被抛弃了..... =.=!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX