当前位置: 首页 > 知识库问答 >
问题:

它们不是在docx中呈现表格和其他html标记,而是使用docx4j ImportXHTML保存为纯文本

许亦
2023-03-14

我想将html代码呈现给docx。而不是呈现html(即表格格式的表格),它只是将html代码作为纯文本写在里面。我使用的是docx4j-重要性XHTML罐。我使用了这里的代码,并修改了它以保存在文件中。

我做错了什么?

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();
            }
        }
    }

共有1个答案

狄冥夜
2023-03-14

我更正了我的代码如下:

  1. 使用ByteArrayStream而不是FileOutputStream,即

而不是

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

使用:

fos = new ByteArrayOutputStream();

完整代码:

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();
            }
        }
    }
 类似资料:
  • 我使用的是WYSIWYG编辑器,但在将数据发送到数据库后,它会显示html标记,就好像它们是文本的一部分一样。我用的是Laravel 5和这个净化器。我不知道这是否是相对的,但在WYSIWYG编辑器中从数据库输出数据后,html标记仍然显示为文本。提前谢谢你的帮助。

  • 问题内容: 我有一些这样的文字: 我想显示不带标签的内容: 我也不想应用标签,我想剥离它们。有什么简单的方法可以做到这一点? 角HTML: 问题答案: jQuery比SLOWER慢40倍左右 ,请不要将jQuery用于该简单任务。 用法: 使用angular.js: 用 :

  • 我正在尝试使用BeautifulSoup转换HTML文本块。以下是一个示例: 我试着做了这样的事情: ...但是这样我的span元素总是在新行上。这当然是一个简单的例子。有没有办法在超文本标记语言页面中获取文本,就像它在浏览器中呈现的方式一样(不需要css规则,只是div、spans、li等元素呈现的常规方式)在Python中?

  • 我第一次接触JSF和JSF标记。xhtml不工作。我的网络。xml文件包含以下代码 我faces.config文件里的代码是 我已经尝试了很多选项,比如将URL映射更改为/faces/*和在Web INF/Lib中包含JAR,但没有用。。。正在寻求帮助。。。。谢谢

  • 问题内容: 我一直听到标签应该用于布局目的,而不是标签。那么这也适用于表单布局吗?我知道表单布局仍然是布局,但似乎使用s 创建表单布局需要更多and 。因此,考虑到这一点,表单布局应改为使用标签吗? 问题答案: 是的,它确实适用于表单布局。请记住,还有诸如FIELDSET和LABEL之类的标记,它们专门用于向表单添加结构,因此,这并不是仅使用DIV的问题。您应该能够用最少的HTML标记表单,然后让

  • 问题内容: 我在用rails3呈现Java脚本时遇到了麻烦(如果相关,我使用JQuery,它工作正常,因为它已在应用程序的许多其他部分中使用)而不是html。 我所拥有的:我认为,我有此链接: 首先,我不明白为什么我必须添加:format =>:js以使控制器使用JS视图,而不是HTML视图。这是控制器的代码: 在控制器类的开始,我有这行: 我的edit.js.erb文件包含带有警报的一行。但是,