Source code for docx.shape

"""Objects related to shapes.

A shape is a visual object that appears on the drawing layer of a document.

from __future__ import annotations

from typing import TYPE_CHECKING

from docx.enum.shape import WD_INLINE_SHAPE
from docx.oxml.ns import nsmap
from docx.shared import Parented

    from docx.oxml.document import CT_Body
    from docx.oxml.shape import CT_Inline
    from import StoryPart
    from docx.shared import Length

[docs]class InlineShapes(Parented): """Sequence of |InlineShape| instances, supporting len(), iteration, and indexed access.""" def __init__(self, body_elm: CT_Body, parent: StoryPart): super(InlineShapes, self).__init__(parent) self._body = body_elm def __getitem__(self, idx: int): """Provide indexed access, e.g. 'inline_shapes[idx]'.""" try: inline = self._inline_lst[idx] except IndexError: msg = "inline shape index [%d] out of range" % idx raise IndexError(msg) return InlineShape(inline) def __iter__(self): return (InlineShape(inline) for inline in self._inline_lst) def __len__(self): return len(self._inline_lst) @property def _inline_lst(self): body = self._body xpath = "//w:p/w:r/w:drawing/wp:inline" return body.xpath(xpath)
[docs]class InlineShape: """Proxy for an ``<wp:inline>`` element, representing the container for an inline graphical object.""" def __init__(self, inline: CT_Inline): super(InlineShape, self).__init__() self._inline = inline @property def height(self) -> Length: """Read/write. The display height of this inline shape as an |Emu| instance. """ return @height.setter def height(self, cy: Length): = cy = cy @property def type(self): """The type of this inline shape as a member of ``docx.enum.shape.WD_INLINE_SHAPE``, e.g. ``LINKED_PICTURE``. Read-only. """ graphicData = self._inline.graphic.graphicData uri = graphicData.uri if uri == nsmap["pic"]: blip = graphicData.pic.blipFill.blip if is not None: return WD_INLINE_SHAPE.LINKED_PICTURE return WD_INLINE_SHAPE.PICTURE if uri == nsmap["c"]: return WD_INLINE_SHAPE.CHART if uri == nsmap["dgm"]: return WD_INLINE_SHAPE.SMART_ART return WD_INLINE_SHAPE.NOT_IMPLEMENTED @property def width(self): """Read/write. The display width of this inline shape as an |Emu| instance. """ return @width.setter def width(self, cx: Length): = cx = cx