如何使用python-docx将图片垂直对齐

时间:2016-05-25 04:48:16

标签: python-docx

我正在使用以下代码添加图片(使用matplotlib将一些乳胶转换为PNG)到我的文本中:

.table-scroll thead {
    display: table;
    width: 100%;
    table-layout: fixed;
}

.table-scroll tbody {
    max-height: 150px;
    overflow-y: auto;
    display: block;
    width: 100%;
    table-layout: fixed;
}

.table-scroll tr {
    display: table;
    table-layout: fixed;
    width: 100%;
}

.table-scroll td {
    height: 47px; // needed in order to keep rows from collapsing
}

这样做没问题,只是图片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' 没有在文档的其余部分中垂直对齐:

raised

我可以通过添加一个字符样式来手动在MS Word中进行对齐,其中高级垂直对齐属性设置为"降低10pt":

fixed

问题是我不知道如何使用python-docx以编程方式执行此操作。从概念上讲,步骤是计算图像的大小,创建一个字体样式,该字体样式减小了一半大小减去字体大小的一半,并将样式应用于包含图片的运行。如何在python-docx中创建凸起或降低的字体样式?

供参考,此处为pic.pngpic.png

1 个答案:

答案 0 :(得分:1)

您的图片周围有一个相当大(透明)的边框。我在其范围内添加了一个像素边框,以使其可见:

enter image description here

我希望Word将图像的底部与基线对齐(如预期的那样)。一种方法是查看是否有一种方法可以指定零底边界。

您还可以尝试运行该图像的下标。我不确定它会做什么,但值得一试。所以像这样:

run = par.add_run()
run.add_picture('x.png')
run.font.subscript = True

如果您发现手动设置为"的运行速度降低了10pt",您可以像这样查看XML(aircode):

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调用来实现这一点,如果你想要的话那就非常需要。