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

docx4j-docDefaultStyle的更改语言设置/正确地将自定义(或更改)库存样式应用于docx中的任何文本

寿卜鹰
2023-03-14

我正在尝试在中使用我定义的(更改的)样式

style=mp。getStyleDefinitionsPart()。getJaxbElement()

更改整个表格/单个表格单元格的样式。我通过在RPr runProperties中设置如下属性来实现:

在为表格单元格应用样式的方法中,我使用以下内容:
setFontFamily(runProperties,style.getFontFamily())

private static void setFontFamily(RPr runProperties, String fontFamily) {
    if (fontFamily != null) {
        RFonts rf = runProperties.getRFonts();
        if (rf == null) {
            rf = new RFonts();
            runProperties.setRFonts(rf);
        }
        rf.setAscii(fontFamily);
    }
}

其他样式属性(如字体大小、颜色等)也是如此,所有这些都有效,但。。。问题是,我用它来动态生成捷克语文档,捷克语有:š、č、ř、ž、ý等字符,我使用Verdana字体作为表格单元格内容,当我用这种方式设置字体时,它只应用与捷克特殊字符不同的字符。

例如,当我将字符串“Pavlovský”生成到新的docx中时,“Pavlovsk”是Verdana字体(如设置的那样),而“ý”字符是Calibri字体。

即使我只是简单地使用wordMLPackage。getMainDocumentPart()。addStyledParagraphOfText(“正常”、“正常”、“不正常”) -所有内容都更改为Calibri(当我打开docx时,段落的样式是正常的-字体Verdana…如我的代码中设置的)

我甚至试着把语言设置成这样

StyleDefinitionsPart styles = mp.getStyleDefinitionsPart ();
Style defaultCharacterStyle = styles.getDefaultCharacterStyle();
extracted(defaultCharacterStyle);
Style defaultParagraphStyle = styles.getDefaultParagraphStyle();
extracted(defaultParagraphStyle);
Style defaultTableStyle = styles.getDefaultTableStyle();
extracted(defaultTableStyle);

哪里:

private static void extracted(Style style) {
    RPr rPr = style.getRPr();
    if (rPr!=null) {
        CTLanguage lang = factory.createCTLanguage();
        lang.setVal("cs-CZ");
        lang.setEastAsia("cs-CZ");
        lang.setBidi("ar-SA");
        rPr.setLang(lang);

        style.setRPr(rPr);
    } else {
        rPr = factory.createRPr();
        CTLanguage lang = factory.createCTLanguage();
        lang.setVal("cs-CZ");
        lang.setEastAsia("cs-CZ");
        lang.setBidi("ar-SA");
        rPr.setLang(lang);
        style.setRPr(rPr);
    }
}

我会感谢任何提示!提前感谢!


共有2个答案

谭卜鹰
2023-03-14

我也面临同样的问题。我的解决方案是:设置所有类型的字体

rf.setAscii(fontFamily);
rf.setCs(fontFamily);
rf.setHAnsi(fontFamily);
邢俊悟
2023-03-14

看看org。docx4j。字体。RunFontSelector。JAVA

这让docx4j能够理解Word如何决定给定字符使用的字体。

我想在您的例子中,rFonts元素上的hAnsi属性才是最重要的。

为什么不解压缩Word中创建的docx,然后查看XML?

 类似资料:
  • 问题内容: 我正在使用React 和开发一个多语言应用程序。 我通过以下方式初始化i18next: 而且我实现了一个语言选择器,该选择器仅将中的值更改为用户选择的值。 这是正确的做法吗? 我问,因为即使这可行,但我仍然感觉自己在通过设置进行“欺骗”,并且我没有按原样使用语言检测。 问题答案: 根据文档,您不需要自己指定语言: 而根据这片源中,它的确使用了插件的检测能力: 这是正确的做法吗? 所以,

  • 问题内容: 我正在尝试实现可以​​更改应用程序语言的功能。 我试图这样设置: 在应用重启后,语言仍然是“系统默认值”。 现在,我通过设置来测试不同的语言。 但是,用户是否可以单击按钮,然后在重新启动后查看选择的语言? 另外,执行此操作以避免在重新启动时更改语言的正确方法是什么? 问题答案: 是的,您可以立即更改应用语言,例如, 使用您的NSUserDefaults值来设置语言。

  • 使用一种语言比另外一种语言更流利?请为您的 Creative Cloud 应用程序选择其他语言。 选择您的操作系统筛选依据:所有系统较新的系统:Mac OS 10.7、Windows 7 或更高版本较旧的系统:Mac OS 10.6、Windows Vista 或更早版本 较新的系统:Mac OS 10.7、Windows 7 或更高版本 使用 Adobe Creative Cloud 桌面应用程

  • 我有一个docx文件,带有Calibri Light的Heading1样式(每隔一个文本也使用Calibri Light)。转换为html后,每个文本都是Calibri Light(正确),但当我打开html文件时,Heading1样式的文本是Times New Roman。(原因:html文件内部没有为Heading1样式设置字体系列) 当我打开docx文件并检查Heading1样式的字体时,它

  • 我正在使用VS Code编辑多种语言(主要是Ruby、PHP和Javascript)的项目,对于每种语言,我们有不同的缩进模型(空格/制表符和宽度)。看起来VS Code支持这一点,因为它允许将和设置为,这是每种语言的定义。 但是当看起来要做我想要的事情时,在模式下总是插入空格。 我试图找到可以编辑每种语言配置的位置,但没有找到这样的设置。我还查看了下的语言目录,但未能找到指定这些功能的内容。 知

  • 问题内容: 我希望使用该类来更改Java中文件的时间戳记元数据。 我想更改所有3个Linux / ext4时间戳(最后修改,访问和更改)。 我可以按如下方式更改前两个时间戳字段: 但是,我无法修改文件的最后一次 更改: 时间。同样,值得关注的是文档中没有提到更改时间戳。最接近的可用属性是,我尝试没有成功。 关于如何根据Java中的自定义时间戳修改文件元数据的任何想法? 谢谢! 问题答案: 我可以使