Cara mengonversi docx ke xhtml

Sep 11 2020

Saya mencoba mencari solusi untuk mengonversi file docx ke XHTML.

Saya menemukan xdocreport, yang terlihat bagus, tetapi saya memiliki beberapa masalah. (dan saya baru mengenal xdocreport)

Menurut dokumentasi mereka di github di sini dan di sini : Saya seharusnya dapat mengonversi dengan kode ini:

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

Saya menggunakan dependensi ini (mencoba versi yang berbeda, seperti 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>

Masalah saya:

  • Gambarnya hilang
  • Warna latar tidak ada (semua halaman memiliki warna latar belakang, yang tidak putih dan saya harus mengubahnya juga)

Bagaimana saya bisa menangani masalah ini? (Atau bagaimana saya bisa mengonversi docx ke xhtml menggunakan Docx4j dengan format / penomoran / gambar?)

Jawaban

1 AxelRichter Sep 11 2020 at 15:28

Untuk mengkonversi *.docxke XHTMLmenggunakan XDocReportdan apache poi's XWPFDocumentsebagai sumber Anda akan perlu XHTMLOptions. Opsi tersebut harus ImageManagerdapat mengatur jalur untuk gambar yang diekstraksi XWPFDocument. Kemudian XHTMLConverterdibutuhkan untuk mengkonversi.

Contoh lengkapnya:

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

Ini menangani gambar dengan benar.

Tetapi XDocReporttidak dapat menangani warna latar belakang halaman XWPFDocumentdengan benar sampai sekarang. Ini mengekstrak dan menangani warna latar belakang paragraf tetapi bukan warna latar belakang halaman.