DOCX4J:将 HTML 转换为 Docx - Table 格式
DOCX4J: Converting HTML to Docx - Table Formatting
我正在将 DocX 转换为 Html 然后再转换回 DocX。最终的 Docx 就成功生成了。但是,转换扭曲了最终文档中 table 的格式。最终 docx 中生成的 table 的单元格宽度加长,导致 table 超出文档边界。
- docx中原来的table栏宽8.15cm(Table宽16.30cm)。
- 转换为 html table 的宽度为:6.42 英寸。
- 转换回 docx table 列宽为 10.76 厘米(Table
宽度, 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") );
}
您的用例是通过 XHTML 往返进行基于 Web 的编辑吗?
如果是这样,也许 docx-html-editor 有帮助。它通过保存往返过程中使用的 state/hints 来工作。
除此之外,Word 中的 table 要么是固定单元格宽度,要么不是。您描述的行为是否以固定宽度 table 发生?
固定宽度应该没问题(或者很容易做到)。不固定更难...
我正在将 DocX 转换为 Html 然后再转换回 DocX。最终的 Docx 就成功生成了。但是,转换扭曲了最终文档中 table 的格式。最终 docx 中生成的 table 的单元格宽度加长,导致 table 超出文档边界。
- docx中原来的table栏宽8.15cm(Table宽16.30cm)。
- 转换为 html table 的宽度为:6.42 英寸。
- 转换回 docx table 列宽为 10.76 厘米(Table 宽度, 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") );
}
您的用例是通过 XHTML 往返进行基于 Web 的编辑吗?
如果是这样,也许 docx-html-editor 有帮助。它通过保存往返过程中使用的 state/hints 来工作。
除此之外,Word 中的 table 要么是固定单元格宽度,要么不是。您描述的行为是否以固定宽度 table 发生?
固定宽度应该没问题(或者很容易做到)。不固定更难...