【问题标题】:Frame around inline images框住内嵌图像
【发布时间】:2019-05-03 14:53:21
【问题描述】:

有没有办法在带有python docx 的内联图像周围放置框架?

我有类似的东西:

from docx import Document
from docx.shared import Mm

document = Document()
table = document.add_table(rows=1, cols=3)
pic_cells = table.rows[0].cells
paragraph = pic_cells[0].paragraphs[0]
run = paragraph.add_run()
run.add_picture('testQR.png', width=Mm(15), height=Mm(15))
document.save('demo.docx')

我需要在图像周围放置一个框架来标记此图像的边框(应该与图像大小相同)。

如何使用 python docx package 格式化?

【问题讨论】:

    标签: python image docx


    【解决方案1】:

    docx 目前似乎不支持这样的功能。 由于您使用的是表格,因此您可能可以执行以下操作:

    1. 新建 Word 模板
    2. 为要放置图像的单元格定义带有边框的自定义表格样式
    3. 在您的 Python 脚本中使用带有 docx 的模板,如下所示:document = Document('template.docx')
    4. 应用您刚刚创建的表格样式

    请阅读this thread了解更多详情。

    另一种方法可能不太优雅,但 100% 有效。在docx 中使用图像之前,您只需在图像周围创建一个边框。 您可以使用PIL(用于python2)或Pillow(用于pyhton3)模块进行图像处理。

    from PIL import Image
    from PIL import ImageOps
    img = Image.open('img.png')
    img_with_border = ImageOps.expand(img, border=1, fill='black')
    img_with_border.save('img-with-border.png')
    

    此代码将获取您的img.png 文件并创建一个新的img-with-border.png,其轮廓为1px 黑色边框。只需在 run.add_picture 语句中使用 img-with-border.png 即可。

    【讨论】:

    • 感谢Pillow 的简洁创意。这确实解决了图片的问题 - 但不是文本。我将深入研究为表格单元格模板样式的可能性。
    • @Stefan 如果您对预定义的表格样式感到满意,那么只需应用来自this list 的一种。但是,如果您需要自定义样式(例如为特定的单个单元格制作边框),那么您别无选择,只能创建自己的模板,正如我在回答中所描述的那样。
    • 在寻找利用图片快速样式的方法时遇到了这个问题。在阅读这篇文章之前甚至没有考虑过枕头,谢谢!
    【解决方案2】:

    如cmets中的vrs所说,最简单的解决方案是:

    table = document.add_table(rows=5, cols=2, style="Table Grid")
    

    并将图片添加到“运行”中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-07
      • 2012-04-22
      • 2018-02-24
      • 2014-10-14
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多