如何使用 python-docx 垂直对齐图片
How to vertically align picture in line using python-docx
我正在使用以下代码向我的文本添加图片(一些胶乳使用 matplotlib 转换为 PNG):
par = doc.add_paragraph()
par.add_run().text = 'foo bar baz'
par.add_run().add_picture('pic.png')
par.add_run().text = 'blah blah blah'
这工作正常,除了图片 pic.png
在文档的其余文本中没有垂直对齐:
我可以在 MS Word 中手动获得对齐方式,方法是添加一种字符样式,并将高级垂直对齐方式 属性 设置为 "lowered by 10pt":
问题是我不知道如何使用 python-docx 以编程方式执行此操作。从概念上讲,这些步骤是计算图像的大小,创建一个字符样式,该样式的大小减去字体大小的一半,然后将样式应用于包含图片的 运行。如何在 python-docx 中创建凸起或降低的字体样式?
供参考,这里是pic.png
:
您的图片周围有相当大的(透明)边框。我在此处的范围内添加了一个像素边框以使其可见:
我希望 Word 将图像的底部与基线对齐(如预期的那样)。一种方法是查看是否可以指定零底边框。
您也可以在该图像上尝试下标 运行。我不确定它会做什么,但值得一试。所以像这样:
run = par.add_run()
run.add_picture('x.png')
run.font.subscript = True
如果你找到你手动设置为"lowered by 10pt"的运行,你可以这样查看XML(航空代码):
run = vertically_adjusted_run() # however you get ahold of it
print(run._element.xml)
我希望您会看到这样的内容:
<w:r>
<w:rPr>
<w:position w:val="20"/>
...
... 其中 w:position 元素设置相对于基线的调整。该值以半点指定。
无论如何,python-docx 还不支持此调整甚至那个低级元素,因此如果您非常想要它,您需要通过 lxml 调用进入那里以完成必要的工作够了。
我正在使用以下代码向我的文本添加图片(一些胶乳使用 matplotlib 转换为 PNG):
par = doc.add_paragraph()
par.add_run().text = 'foo bar baz'
par.add_run().add_picture('pic.png')
par.add_run().text = 'blah blah blah'
这工作正常,除了图片 pic.png
在文档的其余文本中没有垂直对齐:
我可以在 MS Word 中手动获得对齐方式,方法是添加一种字符样式,并将高级垂直对齐方式 属性 设置为 "lowered by 10pt":
问题是我不知道如何使用 python-docx 以编程方式执行此操作。从概念上讲,这些步骤是计算图像的大小,创建一个字符样式,该样式的大小减去字体大小的一半,然后将样式应用于包含图片的 运行。如何在 python-docx 中创建凸起或降低的字体样式?
供参考,这里是pic.png
:
您的图片周围有相当大的(透明)边框。我在此处的范围内添加了一个像素边框以使其可见:
我希望 Word 将图像的底部与基线对齐(如预期的那样)。一种方法是查看是否可以指定零底边框。
您也可以在该图像上尝试下标 运行。我不确定它会做什么,但值得一试。所以像这样:
run = par.add_run()
run.add_picture('x.png')
run.font.subscript = True
如果你找到你手动设置为"lowered by 10pt"的运行,你可以这样查看XML(航空代码):
run = vertically_adjusted_run() # however you get ahold of it
print(run._element.xml)
我希望您会看到这样的内容:
<w:r>
<w:rPr>
<w:position w:val="20"/>
...
... 其中 w:position 元素设置相对于基线的调整。该值以半点指定。
无论如何,python-docx 还不支持此调整甚至那个低级元素,因此如果您非常想要它,您需要通过 lxml 调用进入那里以完成必要的工作够了。