aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/docx
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/docx')
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/DocxFile.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/ZippedDocxFile.java11
3 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
index 65cbc82..9a1f95b 100644
--- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
@@ -274,7 +274,7 @@ public class BodyXmlReader {
Optional<String> title = element.getAttributeOrNone("o:title");
String relationshipId = element.getAttribute("r:id");
String imagePath = relationshipIdToDocxPath(relationshipId);
- return readImage(imagePath, title, () -> file.getInputStream(imagePath));
+ return readImage(imagePath, title, () -> DocxFile.getInputStream(file, imagePath));
}
private ReadResult readInline(XmlElement element) {
@@ -296,7 +296,7 @@ public class BodyXmlReader {
Optional<String> linkRelationshipId = blip.getAttributeOrNone("r:link");
if (embedRelationshipId.isPresent()) {
String imagePath = relationshipIdToDocxPath(embedRelationshipId.get());
- return readImage(imagePath, altText, () -> file.getInputStream(imagePath));
+ return readImage(imagePath, altText, () -> DocxFile.getInputStream(file, imagePath));
} else if (linkRelationshipId.isPresent()) {
String imagePath = relationships.findRelationshipById(linkRelationshipId.get()).getTarget();
return readImage(imagePath, altText, () -> fileReader.getInputStream(imagePath));
diff --git a/src/main/java/org/zwobble/mammoth/docx/DocxFile.java b/src/main/java/org/zwobble/mammoth/docx/DocxFile.java
index b05ee1f..0ef8c23 100644
--- a/src/main/java/org/zwobble/mammoth/docx/DocxFile.java
+++ b/src/main/java/org/zwobble/mammoth/docx/DocxFile.java
@@ -3,7 +3,13 @@ package org.zwobble.mammoth.docx;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Optional;
public interface DocxFile extends Closeable {
- InputStream getInputStream(String name) throws IOException;
+ static InputStream getInputStream(DocxFile file, String name) throws IOException {
+ return file.tryGetInputStream(name)
+ .orElseThrow(() -> new IOException("Missing entry in file: " + name));
+ }
+
+ Optional<InputStream> tryGetInputStream(String name) throws IOException;
}
diff --git a/src/main/java/org/zwobble/mammoth/docx/ZippedDocxFile.java b/src/main/java/org/zwobble/mammoth/docx/ZippedDocxFile.java
index 6b8528a..c69c147 100644
--- a/src/main/java/org/zwobble/mammoth/docx/ZippedDocxFile.java
+++ b/src/main/java/org/zwobble/mammoth/docx/ZippedDocxFile.java
@@ -2,6 +2,7 @@ package org.zwobble.mammoth.docx;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Optional;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -13,9 +14,13 @@ public class ZippedDocxFile implements DocxFile {
}
@Override
- public InputStream getInputStream(String name) throws IOException {
- ZipEntry entry = zipFile.getEntry("word/document.xml");
- return zipFile.getInputStream(entry);
+ public Optional<InputStream> tryGetInputStream(String name) throws IOException {
+ ZipEntry entry = zipFile.getEntry(name);
+ if (entry == null) {
+ return Optional.empty();
+ } else {
+ return Optional.of(zipFile.getInputStream(entry));
+ }
}
@Override