Skip to content

Commit 51ffc24

Browse files
aarbouinalexysdussier
authored andcommitted
Read image size in wp:extent tag
1 parent a04ed29 commit 51ffc24

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

mammoth/docx/body_xml.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -390,26 +390,32 @@ def inline(element):
390390
alt_text = properties.get("descr")
391391
else:
392392
alt_text = properties.get("title")
393+
dimensions = element.find_child_or_null("wp:extent").attributes
394+
size = documents.Size(
395+
width=str(_emu_to_pixel(dimensions.get("cx"))),
396+
height=str(_emu_to_pixel(dimensions.get("cy")))
397+
)
398+
393399
blips = element.find_children("a:graphic") \
394400
.find_children("a:graphicData") \
395401
.find_children("pic:pic") \
396402
.find_children("pic:blipFill") \
397403
.find_children("a:blip")
398-
return _read_blips(blips, alt_text)
404+
return _read_blips(blips, alt_text, size)
399405

400406
def _emu_to_pixel(emu):
401407
return round(int(emu) * EMU_TO_PIXEL)
402408

403-
def _read_blips(blips, alt_text):
404-
return _ReadResult.concat(lists.map(lambda blip: _read_blip(blip, alt_text), blips))
409+
def _read_blips(blips, alt_text, size):
410+
return _ReadResult.concat(lists.map(lambda blip: _read_blip(blip, alt_text, size), blips))
405411

406-
def _read_blip(element, alt_text):
407-
return _read_image(lambda: _find_blip_image(element), alt_text)
412+
def _read_blip(element, alt_text, size):
413+
return _read_image(lambda: _find_blip_image(element), alt_text, size)
408414

409-
def _read_image(find_image, alt_text):
415+
def _read_image(find_image, alt_text, size=None):
410416
image_path, open_image = find_image()
411417
content_type = content_types.find_content_type(image_path)
412-
image = documents.image(alt_text=alt_text, content_type=content_type, open=open_image)
418+
image = documents.image(alt_text=alt_text, content_type=content_type, size=size, open=open_image)
413419

414420
if content_type in ["image/png", "image/gif", "image/jpeg", "image/svg+xml", "image/tiff"]:
415421
messages = []

tests/docx/body_xml_tests.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -933,13 +933,15 @@ def can_read_inline_pictures(self):
933933
drawing_element = _create_inline_image(
934934
blip=_embedded_blip(self.IMAGE_RELATIONSHIP_ID),
935935
description="It's a hat",
936+
extent=(9525, 19000)
936937
)
937938

938939
image = self._read_embedded_image(drawing_element)
939940

940941
assert_equal(documents.Image, type(image))
941942
assert_equal("It's a hat", image.alt_text)
942943
assert_equal("image/png", image.content_type)
944+
assert_equal(documents.Size(width="1", height="2"), image.size)
943945
with image.open() as image_file:
944946
assert_equal(self.IMAGE_BYTES, image_file.read())
945947

@@ -1229,9 +1231,9 @@ def _text_element(value):
12291231
return xml_element("w:t", {}, [xml_text(value)])
12301232

12311233

1232-
def _create_inline_image(blip, description=None, title=None):
1234+
def _create_inline_image(blip, description=None, title=None, extent=None):
12331235
return xml_element("w:drawing", {}, [
1234-
xml_element("wp:inline", {}, _create_image_elements(blip, description=description, title=title))
1236+
xml_element("wp:inline", {}, _create_image_elements(blip, description=description, title=title, extent=extent))
12351237
])
12361238

12371239

@@ -1241,15 +1243,19 @@ def _create_anchored_image(description, blip):
12411243
])
12421244

12431245

1244-
def _create_image_elements(blip, description=None, title=None):
1246+
def _create_image_elements(blip, description=None, title=None, extent=None):
12451247
properties = {}
12461248
if description is not None:
12471249
properties["descr"] = description
12481250
if title is not None:
12491251
properties["title"] = title
1250-
1252+
extent = {
1253+
"cx": extent[0] if extent else "0",
1254+
"cy": extent[1] if extent else "0"
1255+
}
12511256
return [
12521257
xml_element("wp:docPr", properties),
1258+
xml_element("wp:extent", extent),
12531259
xml_element("a:graphic", {}, [
12541260
xml_element("a:graphicData", {}, [
12551261
xml_element("pic:pic", {}, [

0 commit comments

Comments
 (0)