diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-13 23:32:26 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-13 23:32:26 +0000 |
| commit | c46ec78de9524a7b7df0b475b1447a83b4f857fe (patch) | |
| tree | c98c58f6d4aa8cde8824bbfe3b73131143f1d3cc /src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java | |
| parent | 6dd319ca5eebe1f97b9558b5b45bbccf402eb319 (diff) | |
Read linked blips
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java index e911a63..0d49809 100644 --- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java @@ -27,25 +27,27 @@ 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; private final ContentTypes contentTypes; private final DocxFile file; + private final FileReader fileReader; public BodyXmlReader( Styles styles, Numbering numbering, Relationships relationships, ContentTypes contentTypes, - DocxFile file) + DocxFile file, + FileReader fileReader) { this.styles = styles; this.numbering = numbering; this.relationships = relationships; this.contentTypes = contentTypes; this.file = file; + this.fileReader = fileReader; } public ReadResult readElement(XmlElement element) { @@ -276,9 +278,18 @@ public class BodyXmlReader { } private ReadResult readBlip(XmlElement blip, Optional<String> altText) { - String relationshipId = blip.getAttribute("r:embed"); - String imagePath = relationshipIdToDocxPath(relationshipId); - return readImage(imagePath, altText, () -> file.getInputStream(imagePath)); + Optional<String> embedRelationshipId = blip.getAttributeOrNone("r:embed"); + Optional<String> linkRelationshipId = blip.getAttributeOrNone("r:link"); + if (embedRelationshipId.isPresent()) { + String imagePath = relationshipIdToDocxPath(embedRelationshipId.get()); + return readImage(imagePath, altText, () -> file.getInputStream(imagePath)); + } else if (linkRelationshipId.isPresent()) { + String imagePath = relationships.findRelationshipById(linkRelationshipId.get()).getTarget(); + return readImage(imagePath, altText, () -> fileReader.getInputStream(imagePath)); + } else { + // TODO: emit warning + return ReadResult.EMPTY_SUCCESS; + } } private ReadResult readImage(String imagePath, Optional<String> altText, InputStreamSupplier open) { |
