diff options
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/docx')
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 |
