如何在Java中为word文档(.doc或.docx)设置背景颜色(页面颜色)?

时间:2015-12-24 16:24:41

标签: java ms-word apache-poi background-color

通过像https://jsfiddle.net/fx6gtj6o/这样的库,我们可以使用任何文字颜色创建 word文档,但对于背景或文本的突出显示,我没有&#39找不到任何解决方案。

手动方式的单词页面颜色!:

http://poi.apache.org

这是我通过poi.apache创建word文档的主要代码

[Display(Name = "Age", Prompt = "Age")]
[Required(AllowEmptyStrings = false, ErrorMessage = "Age is required")]
[Range(16, 99, ErrorMessage = "Please specify an Age between 16 and 99")]
public int Age { get; set; }

2 个答案:

答案 0 :(得分:2)

更新:XWPF是创建word文档文件的最新方式,但只能通过旧格式版本(.doc)的HWPF设置背景

对于* .doc(即POI的HWPF组件):

  1. 突出显示文字: 查看setHighlighted()

  2. 背景颜色:

    我想你的意思是段落的背景(AFAIK,Word也允许为整个页面着色,这是另一回事)

    setShading()允许您为段落提供前景色和背景色(通过setCvFore()setCvBack() SHDAbstractType)。 IIRC,您需要设置前景以便为段落着色。 背景仅与由两种(交替)颜色组成的阴影相关。

    底层数据结构名为Shd80([MS-DOC],2.9.248)。还有SHDOperand([MS-DOC],2.9.249)反映了Word97之前Word的功能。 [MS-DOC]是二进制Word文件格式规范,可在MSDN上免费获取。

  3. 修改

    以下是一些代码来说明上述内容:

        try {
            HWPFDocument document = [...]; // comes from somewhere
            Range range = document.getRange();
    
            // Background shading of a paragraph
            ParagraphProperties pprops = new ParagraphProperties();
            ShadingDescriptor shd = new ShadingDescriptor();
            shd.setCvFore(Colorref.valueOfIco(0x07)); // yellow; ICO
            shd.setIpat(0x0001); // solid background; IPAT
            pprops.setShading(shd);
            Paragraph p1 = range.insertBefore(pprops, StyleSheet.NIL_STYLE);
            p1.insertBefore("shaded paragraph");
    
            // Highlighting of individual characters
            Paragraph p2 = range.insertBefore(new ParagraphProperties(), StyleSheet.NIL_STYLE);     
            CharacterRun cr = p2.insertBefore("highlighted text\r");
            cr.setHighlighted((byte) 0x06); // red; ICO
    
            document.write([...]); // document goes to somewhere
        } catch (IOException e) {   
            e.printStackTrace();
        }
    
    • ICO是一种颜色结构
    • IPAT是预定义着色样式的列表

答案 1 :(得分:1)

我们只需要添加这3行来为XWPF设置Word文档的背景颜色。我们必须在声明XWPFRun及其文本颜色后设置这些行:

CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
cTShd.setVal(STShd.CLEAR);
cTShd.setFill(hex_background_color);