package org.zwobble.mammoth; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableMap; import org.zwobble.mammoth.documents.*; import org.zwobble.mammoth.docx.BodyXmlReader; import org.zwobble.mammoth.docx.DocumentXmlReader; import org.zwobble.mammoth.docx.OfficeXml; import org.zwobble.mammoth.docx.Styles; import org.zwobble.mammoth.xml.XmlElement; import org.zwobble.mammoth.xml.parsing.XmlParser; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import static com.google.common.collect.Iterables.transform; public class Mammoth { public static String convertToHtml(File file) { try (ZipFile zipFile = new ZipFile(file)) { ZipEntry entry = zipFile.getEntry("word/document.xml"); XmlElement documentXml = OfficeXml.parseXml(zipFile.getInputStream(entry)); Styles styles = new Styles(ImmutableMap.of(), ImmutableMap.of()); Document document = new DocumentXmlReader(new BodyXmlReader(styles)).readElement(documentXml); return convertToHtml(document); } catch (IOException e) { throw new UnsupportedOperationException("Should return a result of failure"); } } private static String convertToHtml(Document document) { return convertChildrenToHtml(document); } private static String convertChildrenToHtml(HasChildren element) { return Joiner.on("").join(transform( element.getChildren(), Mammoth::convertToHtml)); } private static String convertToHtml(DocumentElement element) { return element.accept(new DocumentElementVisitor() { @Override public String visit(Paragraph paragraph) { String content = convertChildrenToHtml(paragraph); if (content.isEmpty()) { return ""; } else { return "

" + content + "

"; } } @Override public String visit(Run run) { return convertChildrenToHtml(run); } @Override public String visit(Text text) { return text.getValue(); } }); } }