From a82d898bc1c6901749f89a905e63c9e511baae84 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 14 Feb 2016 12:58:58 +0000 Subject: Include alt text for images if available --- src/main/java/org/zwobble/mammoth/DocumentConverter.java | 9 ++++++++- .../org/zwobble/mammoth/html/HtmlSelfClosingElement.java | 4 ++++ .../org/zwobble/mammoth/tests/DocumentConverterTests.java | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java index da10324..f4c15b3 100644 --- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java @@ -1,5 +1,6 @@ package org.zwobble.mammoth; +import com.google.common.collect.ImmutableMap; import com.google.common.io.ByteStreams; import org.zwobble.mammoth.documents.*; import org.zwobble.mammoth.html.Html; @@ -134,9 +135,15 @@ public class DocumentConverter { return image.getContentType() .map(contentType -> { try { + ImmutableMap.Builder attributes = ImmutableMap.builder(); + String base64 = Base64.getEncoder().encodeToString(ByteStreams.toByteArray(image.open())); String src = "data:" + contentType + ";base64," + base64; - return list(Html.selfClosingElement("img", map("src", src))); + attributes.put("src", src); + + image.getAltText().ifPresent(altText -> attributes.put("alt", altText)); + + return list(Html.selfClosingElement("img", attributes.build())); } catch (IOException exception) { // TODO: return a result with a warning throw new RuntimeException(exception); diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java index 73f4734..f8bea1d 100644 --- a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java +++ b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java @@ -11,6 +11,10 @@ public class HtmlSelfClosingElement implements HtmlNode { this.attributes = attributes; } + public Map getAttributes() { + return attributes; + } + @Override public void write(StringBuilder builder) { builder.append("<").append(tagName); diff --git a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java index 9287f74..3ae5d16 100644 --- a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java @@ -12,6 +12,9 @@ import java.util.Optional; import static com.natpryce.makeiteasy.MakeItEasy.*; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasEntry; +import static org.hamcrest.Matchers.hasProperty; import static org.zwobble.mammoth.documents.VerticalAlignment.SUBSCRIPT; import static org.zwobble.mammoth.documents.VerticalAlignment.SUPERSCRIPT; import static org.zwobble.mammoth.tests.DeepReflectionMatcher.deepEquals; @@ -149,6 +152,17 @@ public class DocumentConverterTests { deepEquals(list(Html.selfClosingElement("img", map("src", "data:image/png;base64,YWJj"))))); } + @Test + public void imagesHaveAltTagsIfAvailable() { + Image image = new Image( + Optional.of("It's a hat"), + Optional.of("image/png"), + () -> new ByteArrayInputStream(new byte[]{97, 98, 99})); + assertThat( + convertToHtml(image), + contains(hasProperty("attributes", hasEntry("alt", "It's a hat")))); + } + private List convertToHtml(DocumentElement element) { return documentConverter().convertToHtml(element); } -- cgit v1.2.3