Comment convertir docx en xhtml

Sep 11 2020

J'essaie de trouver une solution pour convertir un fichier docx en XHTML.

J'ai trouvé xdocreport, qui a l'air bien, mais j'ai quelques problèmes. (et je suis nouveau sur xdocreport)

D'après leurs documentations sur github ici et ici : je devrais pouvoir convertir avec ce code:

    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();
    }

J'utilise ces dépendances (j'ai essayé différentes versions, comme 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>

Mes problèmes:

  • Les images manquent
  • La couleur d'arrière-plan est manquante (toutes les pages ont une couleur d'arrière-plan, qui n'est pas blanche et je dois également la convertir)

Comment puis-je gérer ces problèmes? (Ou comment puis-je convertir docx en xhtml en utilisant Docx4j avec des formats / numérotation / images?)

Réponses

1 AxelRichter Sep 11 2020 at 15:28

Pour convertir *.docxà l' XHTMLutilisation XDocReportet apache poi« s XWPFDocumentcomme la source que vous aurez besoin XHTMLOptions. Ces options peuvent avoir ImageManagerà définir le chemin des images extraites à partir de XWPFDocument. Ensuite, il XHTMLConverterfaut convertir.

Exemple complet:

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();     
 
 }
}

Cela gère correctement les images.

Mais XDocReportest incapable de gérer XWPFDocumentcorrectement les couleurs d'arrière-plan de la page jusqu'à présent. Il extrait et gère les couleurs d'arrière-plan des paragraphes mais pas les couleurs d'arrière-plan des pages.