aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/Mammoth.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/DocumentReader.java7
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/MammothTests.java18
3 files changed, 25 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java
index bb1e501..93c639a 100644
--- a/src/main/java/org/zwobble/mammoth/Mammoth.java
+++ b/src/main/java/org/zwobble/mammoth/Mammoth.java
@@ -19,6 +19,7 @@ import org.zwobble.mammoth.util.Casts;
import java.io.File;
import java.io.IOException;
import java.util.List;
+import java.util.Optional;
import java.util.zip.ZipFile;
import static org.zwobble.mammoth.docx.DocumentReader.readDocument;
@@ -66,7 +67,7 @@ public class Mammoth {
public static Result<String> convertToHtml(File file, Options options) {
return withDocxFile(file, zipFile ->
- readDocument(zipFile)
+ readDocument(Optional.of(file.toPath()), zipFile)
.flatMap(nodes -> DocumentConverter.convertToHtml(options.idPrefix, options.preserveEmptyParagraphs, DEFAULT_STYLE_MAP, nodes))
.map(Html::stripEmpty)
.map(Html::collapse)
@@ -75,7 +76,8 @@ public class Mammoth {
public static Result<String> extractRawText(File file) {
return withDocxFile(file, zipFile ->
- readDocument(zipFile).map(Mammoth::extractRawTextOfChildren));
+ readDocument(Optional.of(file.toPath()), zipFile)
+ .map(Mammoth::extractRawTextOfChildren));
}
private static <T> T withDocxFile(File file, Function<DocxFile, T> function) {
diff --git a/src/main/java/org/zwobble/mammoth/docx/DocumentReader.java b/src/main/java/org/zwobble/mammoth/docx/DocumentReader.java
index d55fa9b..8fe0919 100644
--- a/src/main/java/org/zwobble/mammoth/docx/DocumentReader.java
+++ b/src/main/java/org/zwobble/mammoth/docx/DocumentReader.java
@@ -7,6 +7,7 @@ import org.zwobble.mammoth.util.MammothLists;
import org.zwobble.mammoth.xml.XmlElement;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.Optional;
import static org.zwobble.mammoth.util.MammothLists.list;
@@ -17,13 +18,11 @@ public class DocumentReader {
BodyXmlReader forName(String name);
}
- public static Result<Document> readDocument(DocxFile zipFile) {
+ public static Result<Document> readDocument(Optional<Path> path, DocxFile zipFile) {
Styles styles = readStyles(zipFile);
Numbering numbering = readNumbering(zipFile);
ContentTypes contentTypes = readContentTypes(zipFile);
- FileReader fileReader = uri -> {
- throw new UnsupportedOperationException();
- };
+ FileReader fileReader = uri -> path.get().toUri().resolve(uri).toURL().openStream();
BodyReaders bodyReaders = name -> {
Relationships relationships = readRelationships(zipFile, name);
return new BodyXmlReader(styles, numbering, relationships, contentTypes, zipFile, fileReader);
diff --git a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
index c165cfd..e778630 100644
--- a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
@@ -5,6 +5,9 @@ import org.zwobble.mammoth.Mammoth;
import org.zwobble.mammoth.results.Result;
import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import static org.junit.Assert.assertThat;
import static org.zwobble.mammoth.results.Result.success;
@@ -67,6 +70,21 @@ public class MammothTests {
}
@Test
+ public void imagesStoredOutsideOfDocumentAreIncludedInOutput() throws IOException {
+ Path tempDirectory = Files.createTempDirectory("mammoth-");
+ try {
+ Path documentPath = tempDirectory.resolve("external-picture.docx");
+ Files.copy(TestData.file("external-picture.docx").toPath(), documentPath);
+ Files.copy(TestData.file("tiny-picture.png").toPath(), tempDirectory.resolve("tiny-picture.png"));
+ assertThat(
+ Mammoth.convertToHtml(documentPath.toFile()),
+ deepEquals(success("<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=\" /></p>")));
+ } finally {
+ tempDirectory.toFile().delete();
+ }
+ }
+
+ @Test
public void contentTypesAreRead() {
assertThat(
convertToHtml("tiny-picture-custom-content-type.docx"),