XWPFDocument 、XWPFParagraph设置段落标题

XWPFDocument 、XWPFParagraph设置段落标题

在开发中遇到使用XWPFDocument 、XWPFParagraph设置标题不起作用的问题,参考了网上的一下资料归纳了以下步骤

第一步:新建一个word文档作为模板,新建一行随便输入内容,设置为一级标题,有需要的话可以换行输入内容设置二级标记等等。

效果如下

在这里插入图片描述

第二步编码:

代码如下:

public class WordUtil {    
	private CTStyles styles = null;
    public void setWord(){
        //模板地址
       XWPFDocument  model = new XWPFDocument(new FileInputStream("D:\\xxx.docx"));
       styles = model.getStyle();
       // 新建的word文档对象
       XWPFDocument doc = new XWPFDocument();
       // 获取新建文档样式
       XWPFStyles docStyle = doc.createStyles();
       // 设置新建文档样式为模板中读取到的样式
       docStyle.setStyles(styles);
           XWPFParagraph para = doc.createParagraph();
           //设置一级标题(注意这里有问题,请往下看)
           para.setStyle("2");
           XWPFRun run = para.createRun();
           // 标题内容
           run.setText("一级标题");
           OutputStream os = new FileOutputStream("D:\\simpleWrite.docx");
            //把doc输出到输出流
            doc.write(os);
            os.close();
    }
}

有一些人就开始疑惑为什么这里 para.setStyle(“2”)中的参数是2,而且有部分人发现 para.setStyle(“2”)中设置2并不起作用。至于在para.setStyle(“2”)中为什么设置的参数是2,在这里解释一下。

因为不同的word模板读取出来的style是不同的,输出读取到的模板样式styles,查看一下内容

<xml-fragment mc:Ignorable="w14" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData">
  <w:docDefaults>
    <w:rPrDefault>
      <w:rPr>
        <w:rFonts w:asciiTheme="minorHAnsi" w:cstheme="minorBidi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi"/>
      </w:rPr>
    </w:rPrDefault>
    <w:pPrDefault/>
  </w:docDefaults>
......(省略内容)
  <w:style w:default="1" w:styleId="1" w:type="paragraph">
    <w:name w:val="Normal"/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:widowControl w:val="0"/>
      <w:jc w:val="both"/>
    </w:pPr>
    <w:rPr>
      <w:rFonts w:asciiTheme="minorHAnsi" w:cstheme="minorBidi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi"/>
      <w:kern w:val="2"/>
      <w:sz w:val="21"/>
      <w:szCs w:val="24"/>
      <w:lang w:bidi="ar-SA" w:eastAsia="zh-CN" w:val="en-US"/>
    </w:rPr>
  </w:style>
  <w:style w:styleId="2" w:type="paragraph">
    <w:name w:val="heading 1"/>
    <w:basedOn w:val="1"/>
    <w:next w:val="1"/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:after="330" w:afterAutospacing="0" w:afterLines="0" w:before="340" w:beforeAutospacing="0" w:beforeLines="0" w:line="576" w:lineRule="auto"/>
      <w:outlineLvl w:val="0"/>
    </w:pPr>
    <w:rPr>
      <w:b/>
      <w:kern w:val="44"/>
      <w:sz w:val="44"/>
    </w:rPr>
  </w:style>
  <w:style w:styleId="3" w:type="paragraph">
    <w:name w:val="heading 2"/>
    <w:basedOn w:val="1"/>
    <w:next w:val="1"/>
    <w:unhideWhenUsed/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:after="260" w:afterAutospacing="0" w:afterLines="0" w:before="260" w:beforeAutospacing="0" w:beforeLines="0" w:line="413" w:lineRule="auto"/>
      <w:outlineLvl w:val="1"/>
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:eastAsia="黑体" w:hAnsi="Arial"/>
      <w:b/>
      <w:sz w:val="32"/>
    </w:rPr>
  </w:style>
  <w:style w:styleId="4" w:type="paragraph">
    <w:name w:val="heading 3"/>
    <w:basedOn w:val="1"/>
    <w:next w:val="1"/>
    <w:unhideWhenUsed/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:after="260" w:afterAutospacing="0" w:afterLines="0" w:before="260" w:beforeAutospacing="0" w:beforeLines="0" w:line="413" w:lineRule="auto"/>
      <w:outlineLvl w:val="2"/>
    </w:pPr>
    <w:rPr>
      <w:b/>
      <w:sz w:val="32"/>
    </w:rPr>
  </w:style>
  <w:style w:styleId="5" w:type="paragraph">
    <w:name w:val="heading 4"/>
    <w:basedOn w:val="1"/>
    <w:next w:val="1"/>
    <w:unhideWhenUsed/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:after="290" w:afterAutospacing="0" w:afterLines="0" w:before="280" w:beforeAutospacing="0" w:beforeLines="0" w:line="372" w:lineRule="auto"/>
      <w:outlineLvl w:val="3"/>
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:eastAsia="黑体" w:hAnsi="Arial"/>
      <w:b/>
      <w:sz w:val="28"/>
    </w:rPr>
  </w:style>
  <w:style w:default="1" w:styleId="7" w:type="character">
    <w:name w:val="Default Paragraph Font"/>
    <w:semiHidden/>
    <w:uiPriority w:val="0"/>
  </w:style>
  <w:style w:default="1" w:styleId="6" w:type="table">
    <w:name w:val="Normal Table"/>
    <w:semiHidden/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:tblPr>
      <w:tblCellMar>
        <w:top w:type="dxa" w:w="0"/>
        <w:left w:type="dxa" w:w="108"/>
        <w:bottom w:type="dxa" w:w="0"/>
        <w:right w:type="dxa" w:w="108"/>
      </w:tblCellMar>
    </w:tblPr>
  </w:style>
</xml-fragment>

找到以下内容

<w:style w:styleId="2" w:type="paragraph">
    <w:name w:val="heading 1"/>
    <w:basedOn w:val="1"/>
    <w:next w:val="1"/>
    <w:qFormat/>
    <w:uiPriority w:val="0"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:after="330" w:afterAutospacing="0" w:afterLines="0" w:before="340" w:beforeAutospacing="0" w:beforeLines="0" w:line="576" w:lineRule="auto"/>
      <w:outlineLvl w:val="0"/>
    </w:pPr>
    <w:rPr>
      <w:b/>
      <w:kern w:val="44"/>
      <w:sz w:val="44"/>
    </w:rPr>
  </w:style>

其中第二行中 <w:name w:val=“heading 1”/>的heading 1表示的就是一级标题,对应的styleId就是2
在这里插入图片描述
所以设置一级标题时在代码中这样写:para.setStyle(“2”)

当然设置标题的方式并非只有这种,也可以自定义标题样式,,在这里就不细说了。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
在 Apache POI 中,可以使用 `XWPFParagraph.setStyle(String styleId)` 方法来设置段落的样式,其中 `styleId` 表示样式的 ID。对于多级标题,需要先定义对应级别的样式,然后将样式 ID 作为参数传入 `setStyle` 方法。 以下是一个示例代码,用于设置三级标题: ```java // 获取文档对象 XWPFDocument doc = new XWPFDocument(); // 定义三个样式,分别用于一、二、三级标题 CTStyle style1 = doc.createStyle(); style1.setStyleId("Heading1"); style1.addNewName().setVal("Heading 1"); style1.addNewBasedOn().setVal("Normal"); style1.addNewNext().setVal("Normal"); style1.addNewLink().setVal("Heading1Char"); style1.addNewUiPriority().setVal(new BigInteger("9")); style1.addNewUnhideWhenUsed(); CTStyle style2 = doc.createStyle(); style2.setStyleId("Heading2"); style2.addNewName().setVal("Heading 2"); style2.addNewBasedOn().setVal("Normal"); style2.addNewNext().setVal("Normal"); style2.addNewLink().setVal("Heading2Char"); style2.addNewUiPriority().setVal(new BigInteger("9")); style2.addNewUnhideWhenUsed(); CTStyle style3 = doc.createStyle(); style3.setStyleId("Heading3"); style3.addNewName().setVal("Heading 3"); style3.addNewBasedOn().setVal("Normal"); style3.addNewNext().setVal("Normal"); style3.addNewLink().setVal("Heading3Char"); style3.addNewUiPriority().setVal(new BigInteger("9")); style3.addNewUnhideWhenUsed(); // 创建一级标题 XWPFParagraph para1 = doc.createParagraph(); para1.setStyle("Heading1"); XWPFRun run1 = para1.createRun(); run1.setText("一级标题"); // 创建二级标题 XWPFParagraph para2 = doc.createParagraph(); para2.setStyle("Heading2"); XWPFRun run2 = para2.createRun(); run2.setText("二级标题"); // 创建三级标题 XWPFParagraph para3 = doc.createParagraph(); para3.setStyle("Heading3"); XWPFRun run3 = para3.createRun(); run3.setText("三级标题"); // 保存文档 doc.write(new FileOutputStream("example.docx")); doc.close(); ``` 在上面的代码中,我们先使用 `doc.createStyle()` 方法创建了三个样式,分别用于一、二、三级标题。其中,`setStyleId` 方法设置样式的 ID,`addNewName` 方法设置样式名称,`addNewBasedOn` 方法设置基于哪个样式,`addNewNext` 方法设置下一个使用的样式,`addNewLink` 方法设置样式链接,`addNewUiPriority` 方法设置 UI 优先级,`addNewUnhideWhenUsed` 方法设置使用时是否隐藏。 接着,我们使用 `doc.createParagraph()` 方法创建三个段落,分别用于一、二、三级标题,并通过 `setStyle` 方法将对应样式的 ID 传入。最后,通过 `createRun` 方法创建文本块,使用 `setText` 方法设置标题内容。 最后,使用 `doc.write` 方法将文档保存到本地。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值