在文档 (.docx) 的特定位置添加图像?
Add an image in a specific position in the document (.docx)?
我使用 Python-docx 生成 Microsoft Word document.The 用户在为例如 "Good Morning every body,This is my %(profile_img)s do you like it?" 写作时希望如此
在 HTML 字段中,我创建了一个 word 文档,并从数据库中恢复了用户的图片,然后用用户的图片替换了关键字 %(profile_img)s 不在文档末尾。对于 Python-docx,我们使用此指令添加图片:
document.add_picture('profile_img.png', width=Inches(1.25))
图片添加到文档中,但出现添加到文档末尾的问题。
用python不能在microsoft word文档的特定位置添加图片吗?我没有在网上找到任何答案,但看到有人在其他地方问同样的问题但没有解决方案。
谢谢(注意:我不是一个经验丰富的程序员,除了这个笨拙的部分,我的代码的其余部分将非常基础)
引用 the python-docx documentation:
The Document.add_picture() method adds a specified picture to the end of the document in a paragraph of its own. However, by digging a little deeper into the API you can place text on either side of the picture in its paragraph, or both.
当我们"dig a little deeper"时,我们发现Run.add_picture()
API。
这是一个使用示例:
from docx import Document
from docx.shared import Inches
document = Document()
p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
r.add_picture('/tmp/foo.jpg')
r.add_text(' do you like it?')
document.save('demo.docx')
好吧,我不知道这是否适用于您,但这是我将特定位置的图像设置为 docx 文档的方法:
我创建了一个基本的 docx 文档(模板文档)。在此文件中,我插入了一些无边框的 table,用作图像的占位符。创建文档时,首先我打开模板,然后更新在 table 中创建图像的文件。所以代码本身与您的原始代码没有太大区别,唯一的区别是我在特定的 table.
中创建段落和图像
from docx import Document
from docx.shared import Inches
doc = Document('addImage.docx')
tables = doc.tables
p = tables[0].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('resized.png',width=Inches(4.0), height=Inches(.7))
p = tables[1].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('teste.png',width=Inches(4.0), height=Inches(.7))
doc.save('addImage.docx')
这是我的解决方案。它在第一个命题上的优势在于它用标题(样式 Header 1)和附加评论部分包围图片。请注意,您必须按照它们在 Word 文档中出现的相反顺序进行插入。
如果您想以编程方式在现有文档中插入图片,此代码段特别有用。
from docx import Document
from docx.shared import Inches
# ------- initial code -------
document = Document()
p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
picPath = 'D:/Development/Python/aa.png'
r.add_picture(picPath)
r.add_text(' do you like it?')
document.save('demo.docx')
# ------- improved code -------
document = Document()
p = document.add_paragraph('Picture bullet section', 'List Bullet')
p = p.insert_paragraph_before('')
r = p.add_run()
r.add_picture(picPath)
p = p.insert_paragraph_before('My picture title', 'Heading 1')
document.save('demo_better.docx')
这是采用了 Robᵩ 写的答案,同时考虑了用户更灵活的输入。
我的假设是 Kais Dkhili(原始询问者)提到的 HTML 字段已经加载到 docx.Document()
中。所以...
确定文档中相关 HTML 文本的位置。
import re
## regex module
img_tag = re.compile(r'%\(profile_img\)s') # declare pattern
for _p in enumerate(document.paragraphs):
if bool(img_tag.match(_p.text)):
img_paragraph = _p
# if and only if; suggesting img_paragraph a list and
# use append method instead for full document search
break # lose the break if want full document search
将所需图像替换为标识为 img_tag = '%(profile_img)s'
的占位符
下面的代码是考虑到文本只包含一个 run
如果条件不同,可能会相应更改
temp_text = img_tag.split(img_paragraph.text)
img_paragraph.runs[0].text = temp_text[0]
_r = img_paragraph.add_run()
_r.add_picture('profile_img.png', width = Inches(1.25))
img_paragraph.add_run(temp_text[1])
完成。 document.save()
如果最终确定。
如果您想知道 temp_text
会发生什么...
[In]
img_tag.split(img_paragraph.text)
[Out]
['This is my ', ' do you like it?']
我花了几个小时在里面。如果您需要使用 python 将图像添加到模板文档文件,最好的解决方案是使用 python-docx-template 库。
文档可用 here
here
中可用的示例
这是主题的变体。设I为具体文档中的段落编号:
p = doc.paragraphs[I].insert_paragraph_before('\n')
p.add_run().add_picture('Fig01.png', width=Cm(15))
我使用 Python-docx 生成 Microsoft Word document.The 用户在为例如 "Good Morning every body,This is my %(profile_img)s do you like it?" 写作时希望如此 在 HTML 字段中,我创建了一个 word 文档,并从数据库中恢复了用户的图片,然后用用户的图片替换了关键字 %(profile_img)s 不在文档末尾。对于 Python-docx,我们使用此指令添加图片:
document.add_picture('profile_img.png', width=Inches(1.25))
图片添加到文档中,但出现添加到文档末尾的问题。 用python不能在microsoft word文档的特定位置添加图片吗?我没有在网上找到任何答案,但看到有人在其他地方问同样的问题但没有解决方案。
谢谢(注意:我不是一个经验丰富的程序员,除了这个笨拙的部分,我的代码的其余部分将非常基础)
引用 the python-docx documentation:
The Document.add_picture() method adds a specified picture to the end of the document in a paragraph of its own. However, by digging a little deeper into the API you can place text on either side of the picture in its paragraph, or both.
当我们"dig a little deeper"时,我们发现Run.add_picture()
API。
这是一个使用示例:
from docx import Document
from docx.shared import Inches
document = Document()
p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
r.add_picture('/tmp/foo.jpg')
r.add_text(' do you like it?')
document.save('demo.docx')
好吧,我不知道这是否适用于您,但这是我将特定位置的图像设置为 docx 文档的方法: 我创建了一个基本的 docx 文档(模板文档)。在此文件中,我插入了一些无边框的 table,用作图像的占位符。创建文档时,首先我打开模板,然后更新在 table 中创建图像的文件。所以代码本身与您的原始代码没有太大区别,唯一的区别是我在特定的 table.
中创建段落和图像from docx import Document
from docx.shared import Inches
doc = Document('addImage.docx')
tables = doc.tables
p = tables[0].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('resized.png',width=Inches(4.0), height=Inches(.7))
p = tables[1].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('teste.png',width=Inches(4.0), height=Inches(.7))
doc.save('addImage.docx')
这是我的解决方案。它在第一个命题上的优势在于它用标题(样式 Header 1)和附加评论部分包围图片。请注意,您必须按照它们在 Word 文档中出现的相反顺序进行插入。
如果您想以编程方式在现有文档中插入图片,此代码段特别有用。
from docx import Document
from docx.shared import Inches
# ------- initial code -------
document = Document()
p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
picPath = 'D:/Development/Python/aa.png'
r.add_picture(picPath)
r.add_text(' do you like it?')
document.save('demo.docx')
# ------- improved code -------
document = Document()
p = document.add_paragraph('Picture bullet section', 'List Bullet')
p = p.insert_paragraph_before('')
r = p.add_run()
r.add_picture(picPath)
p = p.insert_paragraph_before('My picture title', 'Heading 1')
document.save('demo_better.docx')
这是采用了 Robᵩ 写的答案,同时考虑了用户更灵活的输入。
我的假设是 Kais Dkhili(原始询问者)提到的 HTML 字段已经加载到 docx.Document()
中。所以...
确定文档中相关 HTML 文本的位置。
import re
## regex module
img_tag = re.compile(r'%\(profile_img\)s') # declare pattern
for _p in enumerate(document.paragraphs):
if bool(img_tag.match(_p.text)):
img_paragraph = _p
# if and only if; suggesting img_paragraph a list and
# use append method instead for full document search
break # lose the break if want full document search
将所需图像替换为标识为 img_tag = '%(profile_img)s'
的占位符
下面的代码是考虑到文本只包含一个 run
如果条件不同,可能会相应更改
temp_text = img_tag.split(img_paragraph.text)
img_paragraph.runs[0].text = temp_text[0]
_r = img_paragraph.add_run()
_r.add_picture('profile_img.png', width = Inches(1.25))
img_paragraph.add_run(temp_text[1])
完成。 document.save()
如果最终确定。
如果您想知道 temp_text
会发生什么...
[In]
img_tag.split(img_paragraph.text)
[Out]
['This is my ', ' do you like it?']
我花了几个小时在里面。如果您需要使用 python 将图像添加到模板文档文件,最好的解决方案是使用 python-docx-template 库。 文档可用 here here
中可用的示例这是主题的变体。设I为具体文档中的段落编号:
p = doc.paragraphs[I].insert_paragraph_before('\n')
p.add_run().add_picture('Fig01.png', width=Cm(15))