diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-12-06 15:44:56 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-12-06 15:44:56 +0000 |
| commit | af8b26e0e157fe41673094622dc0988ddc3e70d5 (patch) | |
| tree | 3ec4bddf55d02f26956445934135fa9f522cb8ae | |
| parent | 9878af20ba8c637853308323dab3e06c8ebbfed4 (diff) | |
Read v:imagedata with r:id attribute
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 9 | ||||
| -rw-r--r-- | tests/docx/body-reader.tests.js | 25 |
3 files changed, 35 insertions, 1 deletions
@@ -4,6 +4,8 @@ * CLI: print warnings to stderr. +* Read v:imagedata with r:id attribute. + * Read children of v:roundrect. * Ignore office-word:wrap, v:shadow and v:shapetype. diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index d6a20b0..618474e 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -188,7 +188,8 @@ function BodyReader(options) { "v:textbox": readChildElements, "w:txbxContent": readChildElements, "wp:inline": readDrawingElement, - "wp:anchor": readDrawingElement + "wp:anchor": readDrawingElement, + "v:imagedata": readImageData }; return { readXmlElement: readXmlElement, @@ -236,6 +237,12 @@ function BodyReader(options) { } } + function readImageData(element) { + return readImage( + findEmbeddedImageFile(element.attributes["r:id"]), + element.attributes["o:title"]); + } + function findEmbeddedImageFile(relationshipId) { var path = joinZipPath("word", relationships[relationshipId].target); return { diff --git a/tests/docx/body-reader.tests.js b/tests/docx/body-reader.tests.js index 2e85d76..895f29e 100644 --- a/tests/docx/body-reader.tests.js +++ b/tests/docx/body-reader.tests.js @@ -284,6 +284,31 @@ describe("readXmlElement: ", function() { assert.deepEqual(result.value, []); }); + test("can read imagedata elements with r:id attribute", function() { + var imagedataElement = new XmlElement("v:imagedata", {"r:id": "rId5", "o:title": "It's a hat"}); + + var imageBuffer = new Buffer("Not an image at all!"); + var reader = new BodyReader({ + relationships: { + "rId5": {target: "media/hat.png"} + }, + contentTypes: fakeContentTypes, + docxFile: createFakeDocxFile({ + "word/media/hat.png": imageBuffer + }) + }); + var result = reader.readXmlElement(imagedataElement); + assert.deepEqual(result.messages, []); + var element = result.value; + assert.equal("image", element.type); + assert.equal(element.altText, "It's a hat"); + assert.equal(element.contentType, "image/png"); + return element.read() + .then(function(readValue) { + assert.equal(readValue, imageBuffer); + }); + }); + test("can read inline pictures", function() { var drawing = createInlineImage({ blip: createEmbeddedBlip("rId5"), |
