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

Docx4J表字体类型被忽略

申阳伯
2023-03-14
java prettyprint-override">public String xhtmlToDocx(List<String> fileData, File destinationFile) {

    try {
        InputStream in;
        in = new FileInputStream(new File(TCellUtil.TCELL_DATA_LOG_FOLDER_PATH + File.separator + "Header_Temp.docx"));
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);
        System.out.println("before");
        for (String s : wordMLPackage.getMainDocumentPart().fontsInUse())
            System.out.println(s);
        System.out.println("aFTER ");
        VariablePrepare.prepare(wordMLPackage);

        RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
        rfonts.setAscii("Times New Roman");
        rfonts.setHAnsi("Times New Roman");
        rfonts.setEastAsia("Times New Roman");
        XHTMLImporterImpl.addFontMapping("Times New Roman", rfonts);
        wordMLPackage.getMainDocumentPart().getPropertyResolver().getDocumentDefaultRPr().setRFonts(rfonts);

        int c = 1;
        for (String xhtml : fileData) {
            String file_data = "<html>" + xhtml + "</html>";
            AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw" + c + ".html"));
            afiPart.setContentType(new ContentType("text/html"));
            afiPart.setBinaryData(file_data.getBytes());

            Relationship altChunkRel = wordMLPackage.getMainDocumentPart().addTargetPart(afiPart, AddPartBehaviour.REUSE_EXISTING);
            CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk();
            ac.setId(altChunkRel.getId());
            wordMLPackage.getMainDocumentPart().addObject(ac);
            wordMLPackage.getMainDocumentPart().addObject(createPageBreak());
            ((CTSettings) wordMLPackage.getMainDocumentPart().getDocumentSettingsPart().getJaxbElement()).setUpdateFields(new BooleanDefaultTrue());
            wordMLPackage.getMainDocumentPart().convertAltChunks();

            for (String s : wordMLPackage.getMainDocumentPart().fontsInUse())
                System.out.println(s);
            wordMLPackage.getContentTypeManager().addDefaultContentType("docx", "text/html");
            c++;
        }
        XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
        wordMLPackage.save(destinationFile);
        this.dest_filePath = destinationFile.getAbsolutePath();

        return this.dest_filePath;
    } catch (Docx4JException var12) {
        var12.printStackTrace();
    } catch (Exception var13) {
        var13.printStackTrace();
    }
    return null;
}

共有1个答案

拓拔富
2023-03-14

首先要了解的是,是docx4j在进行转换,还是Word在进行转换。

如果您专门调用docx4j-ImportXHTML,或者使用convertAltChunks(),那么docx4j将会尝试这样做。请注意,docx4j只转换XHTML类型(即不是HTML)的altChunk。因此,如果它是一个HTML altChunk,Word正在进行转换。

在您发布的代码中:

           AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw"+c+".html"));

                   afiPart.setContentType(new ContentType("text/html"));

            afiPart.setBinaryData(file_data.getBytes());
 类似资料:
  • 本文向大家介绍容易被忽略的Python内置类型,包括了容易被忽略的Python内置类型的使用技巧和注意事项,需要的朋友参考一下 Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们。 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些“不同寻常”的内置类型。 (注意:本文基于python3,不会包含任何python2相关内容) fr

  • 问题内容: 该属性不适用于。这仅在Chrome中发生。 问题答案: 从MDN的文档中 如果值 类型 属性是,,,,,或,此属性指定的最大字符数(在Unicode代码点),用户可以输入; 对于其他控件类型,将忽略它。 因此在设计上被忽略。 根据您的需求,您可以使用和属性作为 INON 在他/她的回答表明(注:这只会定义的约束范围,而不是值的实际字符长度,虽然-9999〜9999将覆盖所有0-4位数字

  • 我试图用多行字符串创建一个表,但我的表没有正确设置字符串的格式。以下是jsx: 下面是相应的html: 但在浏览器中它看起来像: 发生了什么,如何让我的换行符出现?

  • 问题内容: 我正在使用EclipseLink(2.5.1,也尝试过2.5.2-M1)构建一个Java SE 8(oracle 1.8.0-b129)应用程序,并且拥有一个Entity类,尽管已正确注释和删除,但EclipeLink只是忽略了它在persistence.xml文件中引用。日志中没有提及该类,没有为它生成任何模式,等等。使用该实体将给出“抽象模式类型未知”错误。 我想我终于找到了原因,

  • 我创建了一个小提琴,试图使用字体权重为300的Open Sans字体: HTML语言 CSS公司 我使用谷歌字体来定义CSS 我可以看到Firefox(Ubuntu 13.10)在字体粗细:300(轻量级)和字体粗细:400(正常)下渲染时有所不同,但在Chrome(版本33.0.1750.117)中没有差异,其中所有内容看起来都像是以字体权重:400呈现的。是我做错了什么还是 Chrome 中存

  • 问题内容: 如果lambda表达式不需要参数,因此名称过多,该如何写? 这种方式不能编译: 但这确实做到了: 有没有更好的办法? 问题答案: 既然您提到了这可行 我假设预期的功能接口方法必须接受一个参数。自Java8以来,该标识符是保留关键字。 我只会使用一个一次性的(有效标识符)字符。 甚至 明确地说。 在Java语言规范定义了一个lambda表达式的句法 和 换句话说,您不能省略标识符。 作为