summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-12-06 15:44:56 +0000
committerMichael Williamson <mike@zwobble.org>2015-12-06 15:44:56 +0000
commitaf8b26e0e157fe41673094622dc0988ddc3e70d5 (patch)
tree3ec4bddf55d02f26956445934135fa9f522cb8ae
parent9878af20ba8c637853308323dab3e06c8ebbfed4 (diff)
Read v:imagedata with r:id attribute
-rw-r--r--NEWS2
-rw-r--r--lib/docx/body-reader.js9
-rw-r--r--tests/docx/body-reader.tests.js25
3 files changed, 35 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 3948a28..e8d925c 100644
--- a/NEWS
+++ b/NEWS
@@ -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"),