docx4j-ImportXHTML - проблема с форматом страницы после конвертации - PullRequest
0 голосов
/ 10 октября 2019

Я хочу преобразовать docx в xhtml, а затем в docx.

Я видел проект docx4j-ImportXHTML, который, кажется, соответствует моим потребностям.

Я сделал это:

public static void convertFragment(Long idConsultant, String fileName){
        WordprocessingMLPackage wordMLPackage = null;
        try {
            wordMLPackage = WordprocessingMLPackage.load(new File(fileName));

            // XHTML export
            AbstractHtmlExporter exporter = new HtmlExporterNG2();
            AbstractHtmlExporter.HtmlSettings htmlSettings = new AbstractHtmlExporter.HtmlSettings();

            htmlSettings.setWmlPackage(wordMLPackage);

            boolean nestLists = false;
            if (nestLists) {
                SdtWriter.registerTagHandler("HTML_ELEMENT", new SdtToListSdtTagHandler());
            } else {
                htmlSettings.getFeatures().remove(ConversionFeatures.PP_HTML_COLLECT_LISTS);
            } // must do one or the other

            String htmlFilePath = fileName+"_"+idConsultant+".html";
            OutputStream os = null;

            os = new FileOutputStream(htmlFilePath);
            Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_NONE);
            FileInputStream fis = null;
            fis = new FileInputStream(fileName+"_"+idConsultant+".html");
            String stringFromFile= IOUtils.toString(fis).replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("<br>","<br></br>").replaceAll("<p></p>","<br></br>").replaceAll("&nbsp;", "\u00a0");
            wordMLPackage = WordprocessingMLPackage.createPackage();
            XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
            wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert( stringFromFile, null) );

            System.out.println(
            XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true));


            wordMLPackage.save(new File(fileName) );
        } catch (Docx4JException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
}

Моя проблема заключается в том, что итоговый документ не имеет тех же полей, что и оригинал, в то время как я перезаписываю исходный документ. Поля идут от

enter image description here

до

enter image description here

Есть лиспособ сохранить поля одинаковыми?
Спасибо.

...