Python办公

Python办公 知识量:2 - 22 - 78

2.9 操作图片><

插入图片- 2.9.1 -

在处理 Word 文档时,插入图片是一个常见的需求。python-docx 库提供了 add_picture() 方法,用于将图片插入到 Word 文档中。

以下是使用 add_picture() 方法插入图片的示例代码:

from docx import Document  
  
# 创建一个新的 Word 文档对象  
document = Document()  
  
# 添加图片  
document.add_picture('image.jpg', width=500, height=300)  
  
# 保存文档  
document.save('document.docx')

在上面的示例中,首先创建了一个新的 Word 文档对象。然后,使用 add_picture() 方法添加了一张图片,图片路径为 image.jpg。通过设置 width 和 height 参数,可以指定图片的宽度和高度。可以根据需要调整这些参数以适应需求。最后,使用 save() 方法将文档保存到磁盘上。

除了指定图片路径和大小,add_picture() 方法还有其他可选参数,如图片的布局和环绕文字方式等。

查看图片- 2.9.2 -

使用 add_picture() 方法插入图片时,实际上是创建了一个 InlineShape 对象。

InlineShape 对象表示文档中的内联图形,包括图片、形状、文本框等。通过访问 Document 对象的 inline_shapes 属性,可以获取文档中所有的 InlineShape 对象。

以下是一个示例代码,演示如何遍历 InlineShape 对象并打印它们的类型:

from docx import Document  
  
# 打开文档  
document = Document('document.docx')  
  
# 遍历所有的内联形状  
for inline_shape in document.inline_shapes:  
    # 打印内联形状的类型  
    print(inline_shape.type)

在上面的代码中,打开了一个现有的 Word 文档,并遍历了所有的内联形状。对于每个内联形状,打印了它的类型。如果类型为3,则表示该内联形状是一个图片。

通过查看 InlineShape 对象的类型属性,可以了解文档中不同类型的内联形状。这对于进一步处理或操作这些形状非常有用。注意:除了图片之外,InlineShape 还可能包含其他类型的形状、文本框等。

删除图片- 2.9.3 -

在处理 Word 文档时,有时候需要删除文档中的图片。图片可能是作为内联形状 (InlineShape) 对象嵌入到段落 (Paragraph) 或运行 (Run) 中的。因此,要删除图片,可以根据图片所在的层级来选择合适的方法。

1. 如果图片位于一个段落中,可以通过清空该段落来删除图片。段落对象提供了一个 clear() 方法,用于清除段落中的所有内容,包括图片。以下是一个示例代码:

from docx import Document  
  
# 打开文档  
document = Document('document.docx')  
  
# 找到包含图片的段落  
for paragraph in document.paragraphs:  
    if paragraph.inline_shapes:  
        # 清空段落中的内容  
        paragraph.clear()  
  
# 保存文档  
document.save('document_without_images.docx')

在上面的代码中,遍历了文档中的所有段落,并检查每个段落是否包含内联形状(即图片)。如果包含内联形状,使用 clear() 方法清空该段落,从而删除其中的图片。最后,保存修改后的文档。

2. 如果图片位于一个运行中,可以通过清空该运行来删除图片。运行对象也提供了一个 clear() 方法,用于清除运行中的所有内容。以下是一个示例代码:

from docx import Document  
  
# 打开文档  
document = Document('document.docx')  
  
# 找到包含图片的运行  
for paragraph in document.paragraphs:  
    for run in paragraph.runs:  
        if run.inline_shapes:  
            # 清空运行中的内容  
            run.clear()  
  
# 保存文档  
document.save('document_without_images.docx')

在上面的代码中,同样遍历了文档中的所有段落和运行,并检查每个运行是否包含内联形状(即图片)。如果包含内联形状,使用 clear() 方法清空该运行,从而删除其中的图片。最后,保存修改后的文档。

图片尺寸- 2.9.4 -

在处理 Word 文档时,插入图片后调整其尺寸是很常见的需求。如果不指定图片的宽度和高度,图片将以原始尺寸插入到文档中。这可能会导致图片占用过多的空间,影响文档的整体布局。

在 python-docx 库中,可以使用 add_picture() 方法的 width 和 height 参数来调整图片的尺寸。这些参数的单位是 EMU(English Metric Units),是一种在 Word 中常用的长度单位。

要调整图片的尺寸,可以在调用 add_picture() 方法时指定 width 和 height 参数。例如:

from docx import Document  
  
# 创建一个新的 Word 文档对象  
document = Document()  
  
# 添加图片并调整尺寸  
document.add_picture('image.jpg', width=50000, height=30000)  
  
# 保存文档  
document.save('document.docx')

在上面的示例中,添加了一张图片,并设置了宽度为 50000 EMU,高度为 30000 EMU。可以根据需要自行调整这些值,以适应文档布局和设计要求。

除了使用 EMU 单位,还可以使用其他长度单位,如厘米、毫米、英寸等。注意:在 Word 中使用这些单位可能需要一些额外的计算或转换。因此,建议使用 EMU 单位来调整图片尺寸,以避免不必要的麻烦。

图片对齐- 2.9.5 -

在处理 Word 文档时,对齐图片是一个重要的排版需求。由于图片是内联元素,对齐操作实际上是针对包含图片的段落进行的。

段落的对齐方式主要有以下几种:

  • 居左对齐:将段落的内容靠左对齐,右侧留有空白。这是最常见的对齐方式。

  • 居中对齐:将段落的内容居中对齐,左右两侧空白均匀分布。

  • 居右对齐:将段落的内容靠右对齐,左侧留有空白。这种对齐方式比较少见,但在某些特殊排版中很有用。

  • 两端对齐:将段落的内容在左右两侧同时对齐,使整个段落看起来更加整齐。这种对齐方式常用于需要保持文字整齐的场合。

  • 分散对齐:将段落的内容分散对齐,使得段落中的每个字符都尽可能地与左侧边界对齐。这种对齐方式常用于文字较多的段落,可以增加可读性。

在对齐图片时,通常是将包含图片的段落进行对齐操作。例如,如果想将一个图片居中对齐,需要选择包含该图片的段落,并将其设置为居中对齐。同理,如果想将图片靠左或靠右对齐,也可以选择相应的段落对齐方式。

除了使用段落对齐方式外,还可以通过其他方式调整图片的对齐,如使用表格、文本框等容器来限制图片的对齐范围。这些方法可以更加灵活地控制图片的对齐方式,以适应不同的排版需求。

浮动图片- 2.9.6 -

在 Word 文档中,图片可以以两种方式显示:嵌入型和浮动型。

  • 嵌入型:图片作为内联元素插入到段落中,并排显示在文本旁边。这是默认的插入方式,并且不支持文本与图片重叠。

  • 浮动型:图片可以自由浮动在文档中,不受文本位置的限制。图片可以设置环绕方式,如四周型环绕、紧密型环绕、上下型环绕等,以控制图片与文本的相对位置。

在 python-docx 库中,目前并不支持设置图片为浮动型并设置环绕方式。因此,如果需要实现文本与图片重叠的效果,需要采取其他方法。

一种可能的解决方案是使用其他库或工具,如 Open XML SDK 或其他第三方库,来操作 Word 文档的底层 XML 数据。通过直接修改 Word 文档的 XML 结构,可以手动设置图片的浮动方式和环绕方式。

另一种方法是手动在 Word 中调整图片和文本的位置,然后使用 python-docx 库将调整后的文档保存为新的文件。这样可以在一定程度上实现文本与图片重叠的效果,但需要手动操作 Word,并且可能无法完全满足特定的排版需求。