So konvertieren Sie docx in xhtml
Ich versuche eine Lösung zu finden, um eine docx-Datei in XHTML zu konvertieren.
Ich habe xdocreport gefunden, was gut aussieht, aber ich habe einige Probleme. (und ich bin neu bei xdocreport)
Nach ihren Dokumentationen auf Github hier und hier : Ich sollte in der Lage sein, mit diesem Code zu konvertieren:
String source = args[0];
String dest = args[1];
// 1) Create options DOCX to XHTML to select well converter form the registry
Options options = Options.getFrom(DocumentKind.DOCX).to(ConverterTypeTo.XHTML);
// 2) Get the converter from the registry
IConverter converter = ConverterRegistry.getRegistry().getConverter(options);
// 3) Convert DOCX to (x)html
try {
InputStream in = new FileInputStream(new File(source));
OutputStream out = new FileOutputStream(new File(dest));
converter.convert(in, out, options);
} catch (XDocConverterException | FileNotFoundException e) {
e.printStackTrace();
}
Ich verwende diese Abhängigkeiten (habe verschiedene Versionen ausprobiert, wie 2.0.2, 2.0.0, 1.0.6):
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.converter.docx.xwpf</artifactId>
<version>2.0.2</version>
</dependency>
Meine Probleme:
- Die Bilder fehlen
- Die Hintergrundfarbe fehlt (alle Seiten haben eine Hintergrundfarbe, die nicht weiß ist, und ich muss diese auch konvertieren)
Wie kann ich mit diesen Problemen umgehen? (Oder wie kann ich docx mit Docx4j mit Formaten / Nummerierungen / Bildern in xhtml konvertieren?)
Antworten
So konvertieren *.docxzu XHTMLverwenden XDocReportund apache poiist XWPFDocumentals Quelle die Sie benötigen XHTMLOptions. Diese Optionen können ImageManagerden Pfad für extrahierte Bilder festlegen XWPFDocument. Dann XHTMLConverterwird zum Konvertieren benötigt.
Vollständiges Beispiel:
import java.io.*;
//needed jars: xdocreport-2.0.2.jar,
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import fr.opensagres.poi.xwpf.converter.core.ImageManager;
//needed jars: all apache poi dependencies
import org.apache.poi.xwpf.usermodel.*;
public class DOCXToXHTMLXDocReport {
public static void main(String[] args) throws Exception {
String docPath = "./WordDocument.docx";
String root = "./";
String htmlPath = root + "WordDocument.html";
XWPFDocument document = new XWPFDocument(new FileInputStream(docPath));
XHTMLOptions options = XHTMLOptions.create().setImageManager(new ImageManager(new File(root), "images"));
FileOutputStream out = new FileOutputStream(htmlPath);
XHTMLConverter.getInstance().convert(document, out, options);
out.close();
document.close();
}
}
Dies behandelt Bilder richtig.
Ist XDocReportaber bisher nicht in der Lage, Seitenhintergrundfarben XWPFDocumentrichtig zu handhaben . Es extrahiert und verarbeitet Absatzhintergrundfarben, jedoch keine Seitenhintergrundfarben.