DOCX4J:将HTML转换为Docx - 表格格式

时间:2016-03-22 10:49:07

标签: java docx4j

我正在将DocX转换为Html并返回DocX。最终的Docx已成功生成。但是,转换会扭曲最终文档中表格的格式。最终docx中生成的表格的单元格宽度加长,导致表格超出文档边界。

  • docx中的原始表格的列宽为8.15厘米(表格宽度为16.30厘米)。
  • 转换为html,表格宽度为:6.42in。
  • 转换回docx表格列宽为10.76厘米(表格 宽度,21.52cm)。

我有办法在转换后保持相同的格式吗? 非常感谢任何建议。

以下是我的代码:

    private void convertHtmlToDocx() throws IOException, JAXBException, Docx4JException{
        //convert back to docx 

        String inputfilepath = System.getProperty("user.dir") + "myPath";
        String baseURL = "file:///"+System.getProperty("user.dir")+"path";

        String stringFromFile = FileUtils.readFileToString(new File(inputfilepath), "UTF-8");

        String unescaped = stringFromFile;
        if (stringFromFile.contains("</") ) {
            unescaped = StringEscapeUtils.unescapeHtml(stringFromFile);         
        }      

        System.out.println("Unescaped: " + unescaped);

        // Setup font mapping
        RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
        rfonts.setAscii("Century Gothic");
        XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts);

        // Create an empty docx package
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

        NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
        wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
        ndp.unmarshalDefaultNumbering();        

        // Convert the XHTML, and add it into the empty docx we made
        XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
        XHTMLImporter.setTableFormatting(FormattingOption.IGNORE_CLASS);
        XHTMLImporter.setParagraphFormatting(FormattingOption.IGNORE_CLASS);
        XHTMLImporter.setHyperlinkStyle("Hyperlink");
        wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(unescaped, baseURL) );


        wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "myPath") );

    }

1 个答案:

答案 0 :(得分:0)

您的用例是否通过XHTML往返进行基于网络的编辑?

如果是这样,也许docx-html-editor有帮助。它的工作原理是保存往返过程中使用的状态/提示。

除此之外,Word中的表格是固定的单元格宽度,还是不是。您描述的行为是否与固定宽度表一起发生?

固定宽度应该没问题(或者很容易做到这一点)。不修复是更难......