aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-13 23:32:26 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-13 23:32:26 +0000
commitc46ec78de9524a7b7df0b475b1447a83b4f857fe (patch)
treec98c58f6d4aa8cde8824bbfe3b73131143f1d3cc /src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
parent6dd319ca5eebe1f97b9558b5b45bbccf402eb319 (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.java21
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) {