poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

POI生成Word时,设置段落的样式

  String style = "2"; //标题2的样式(这个值,我发现不同的文档值都不一样。。这里只是一个例子)
  XWPFParagraph xwpfParagraph = doc.insertNewParagraph(run);
  xwpfParagraph.setStyle(style);

其实设置其他的样式都一样。

例如:你想设置你的样式为“标题2”(“标题2”只是你在word里看到的标题名称,实际上在xml中的名称可能不一样)

word里:我是标题2的样式 --这个段落在word里设置了标题2的样式

poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等_第1张图片

xml里:



        


    
        
    
    


    是标题


    
        
    
    2


    
        
    
    的样式


而样式的定义是这样的(这些都可以在word转成xml的内容里找到):

 
  





















到此我们就知道,设置段落样式“标题2”的方法就是: xwpfParagraph.setStyle("2");

问题来了!

如何知道样式的值呢?

代码如下:

/**
     * 查找文档样式值
     * @param document 文档类
     * @param styleName 样式名称
     * @return 样式值
     * @throws IOException
     * @throws XmlException
     */
    public static String getStyleValue(XWPFDocument document, String styleName) throws IOException, XmlException {
        if (styleName == null || styleName.length() == 0) {
            return null;
        }
        CTStyles styles = document.getStyle();
        CTStyle[] styleArray = styles.getStyleArray();
        for (CTStyle style : styleArray) {
            if (style.getName().getVal().equals(styleName)) {
                return style.getStyleId();
            }
        }
        return null;
    }

在word里的样式名称是 标题 2,但xml里就是 ,所以使用word默认标题的时候使用heading 开头的就好了。

自定义的标题,获取样式值的时候,直接用自定义的标题名称就好了。

注意 如果不生效,就先新建一个文档,把段落设置成想要的样式,然后看看段落样式的值是多少就可以了。 我觉得大部分问题的解决方法都可以去看xml里的值,然后再用代码去设置值就好了。

转载于:https://my.oschina.net/isaac21/blog/3017516

你可能感兴趣的:(poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等)