aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/ReadResult.java4
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java19
3 files changed, 36 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
index 333780a..e911a63 100644
--- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
@@ -1,5 +1,6 @@
package org.zwobble.mammoth.docx;
+import com.google.common.collect.ImmutableSet;
import org.zwobble.mammoth.documents.*;
import org.zwobble.mammoth.results.Result;
import org.zwobble.mammoth.results.Warning;
@@ -11,6 +12,7 @@ import org.zwobble.mammoth.xml.XmlElementList;
import org.zwobble.mammoth.xml.XmlNode;
import java.util.Optional;
+import java.util.Set;
import java.util.function.Function;
import static com.google.common.collect.Iterables.filter;
@@ -22,6 +24,10 @@ import static org.zwobble.mammoth.util.MammothLists.list;
import static org.zwobble.mammoth.util.MammothStrings.trimLeft;
public class BodyXmlReader {
+ private static final Set<String> IMAGE_TYPES_SUPPORTED_BY_BROWSERS = ImmutableSet.of(
+ "image/png", "image/gif", "image/jpeg", "image/svg+xml", "image/tiff");
+
+
private final Styles styles;
private final Numbering numbering;
private final Relationships relationships;
@@ -278,7 +284,13 @@ public class BodyXmlReader {
private ReadResult readImage(String imagePath, Optional<String> altText, InputStreamSupplier open) {
Optional<String> contentType = contentTypes.findContentType(imagePath);
Image image = new Image(altText, contentType, open);
- return success(image);
+
+ String contentTypeString = contentType.orElse("(unknown)");
+ if (IMAGE_TYPES_SUPPORTED_BY_BROWSERS.contains(contentTypeString)) {
+ return success(image);
+ } else {
+ return ReadResult.withWarning(image, warning("Image of type " + contentTypeString + " is unlikely to display in web browsers"));
+ }
}
private String relationshipIdToDocxPath(String relationshipId) {
diff --git a/src/main/java/org/zwobble/mammoth/docx/ReadResult.java b/src/main/java/org/zwobble/mammoth/docx/ReadResult.java
index 31bbf2a..69c4d1b 100644
--- a/src/main/java/org/zwobble/mammoth/docx/ReadResult.java
+++ b/src/main/java/org/zwobble/mammoth/docx/ReadResult.java
@@ -49,6 +49,10 @@ public class ReadResult {
return new ReadResult(list(), list(), list(warning));
}
+ public static ReadResult withWarning(DocumentElement element, Warning warning) {
+ return new ReadResult(list(element), list(), list(warning));
+ }
+
private final List<DocumentElement> elements;
private final List<DocumentElement> extra;
private final List<Warning> warnings;
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
index 62fced9..49542ec 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
@@ -432,6 +432,25 @@ public class BodyXmlTests {
}
}
+ @Test
+ public void warningIfImageTypeIsUnsupportedByWebBrowsers() {
+ XmlElement element = inlineImageXml(embeddedBlipXml("rId5"), "");
+ Relationships relationships = new Relationships(map(
+ "rId5", new Relationship("media/hat.emf")));
+ DocxFile file = new InMemoryDocxFile(map("word/media/hat.emf", "Not an image at all!"));
+ ContentTypes contentTypes = new ContentTypes(map("emf", "image/x-emf"), map());
+
+ Result<?> result = read(
+ a(bodyReader,
+ with(RELATIONSHIPS, relationships),
+ with(DOCX_FILE, file),
+ with(CONTENT_TYPES, contentTypes)),
+ element);
+ assertThat(
+ result,
+ hasProperty("warnings", deepEquals(list(warning("Image of type image/x-emf is unlikely to display in web browsers")))));
+ }
+
private XmlElement inlineImageXml(XmlElement blip, String description) {
return element("w:drawing", list(
element("wp:inline", imageXml(blip, description))));