Instead of rendering tables and other html tags in docx these are saved as plain text using docx4j-ImportXHTML

前端 未结 1 441
感情败类
感情败类 2020-12-21 16:19

I want to render html code to docx. Instead of rendering html(i.e. tables in tabular format) it simply writes html code in it as plain text. I am using docx4j-ImportXHTML ja

相关标签:
1条回答
  • 2020-12-21 16:47

    I corrected my code as below:

    1. Use ByteArrayStream instead of FileOutputStream i.e.

    Instead of

    fos = new FileOutputStream(actualFile);
                wordMLPackage.getMainDocumentPart().getContent().addAll( 
                        XHTMLImporter.convert( xhtml, null) );
    

    Use:

    fos = new ByteArrayOutputStream();
    
    1. Add wordMLPackage.save(actualFile)

    Full code:

    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();
                }
            }
        }
    
    0 讨论(0)
提交回复
热议问题