而不是在docx中呈现表和其他html标记,而是使用docx4j-ImportXHTML将它们保存为纯文本
我想将HTML代码呈现给docx。 它不是渲染html(即表格格式的表格),而是简单地将html代码写为纯文本。 我使用的是docx4j-ImportXHTML jar。 我使用了这里的代码并将其修改为保存在文件中。
我究竟做错了什么?
public static void xhtmlToDocx(String xhtml, String destinationPath, String fileName) { File dir = new File (destinationPath); File actualFile = new File (dir, fileName); WordprocessingMLPackage wordMLPackage = null; try { wordMLPackage = WordprocessingMLPackage.createPackage(); } catch (InvalidFormatException e) { e.printStackTrace(); } XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage); //XHTMLImporter.setDivHandler(new DivToSdt()); //OutputStream os = null; OutputStream fos = null; try { fos = new FileOutputStream(actualFile); wordMLPackage.getMainDocumentPart().getContent().addAll( XHTMLImporter.convert( xhtml, null) ); System.out.println(XmlUtils.marshaltoString(wordMLPackage .getMainDocumentPart().getJaxbElement(), true, true)); // Back to XHTML HTMLSettings htmlSettings = Docx4J.createHTMLSettings(); htmlSettings.setWmlPackage(wordMLPackage); // output to an OutputStream. //os = new ByteArrayOutputStream(); // If you want XHTML output Docx4jProperties.setProperty("docx4j.Convert.Out.HTML.OutputMethodXML", true); Docx4J.toHTML(htmlSettings, fos, Docx4J.FLAG_EXPORT_PREFER_XSL); } catch (Docx4JException | FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }
我更正了我的代码如下:
- 使用ByteArrayStream而不是FileOutputStream ie
代替
fos = new FileOutputStream(actualFile); wordMLPackage.getMainDocumentPart().getContent().addAll( XHTMLImporter.convert( xhtml, null) );
使用:
fos = new ByteArrayOutputStream();
- 添加wordMLPackage.save(actualFile)
完整代码 :
public static void xhtmlToDocx1(String xhtml, String destinationPath, String fileName) { File dir = new File (destinationPath); File actualFile = new File (dir, fileName); WordprocessingMLPackage wordMLPackage = null; try { wordMLPackage = WordprocessingMLPackage.createPackage(); } catch (InvalidFormatException e) { e.printStackTrace(); } XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage); OutputStream fos = null; try { fos = new ByteArrayOutputStream(); System.out.println(XmlUtils.marshaltoString(wordMLPackage .getMainDocumentPart().getJaxbElement(), true, true)); HTMLSettings htmlSettings = Docx4J.createHTMLSettings(); htmlSettings.setWmlPackage(wordMLPackage); Docx4jProperties.setProperty("docx4j.Convert.Out.HTML.OutputMethodXML", true); Docx4J.toHTML(htmlSettings, fos, Docx4J.FLAG_EXPORT_PREFER_XSL); wordMLPackage.save(actualFile); } catch (Docx4JException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }