【随手记录】poi添加脚注

POI操作word添加脚注

private void addFootNote(XWPFDocument doc, XWPFParagraph paragraph) {
		// 检查是否为空
		if (doc.getFootnotes().isEmpty()){
			doc.createFootnotes();
		}
		XWPFFootnotes footnotes = doc.createFootnotes();
		// 创建脚注
		CTFtnEdn ctFtnEdn = CTFtnEdn.Factory.newInstance();
		BigInteger footNoteId = BigInteger.valueOf(footnotes.getFootnotesList().size());
		ctFtnEdn.setId(footNoteId);
		// 关联脚注样式
		CTP ctp = ctFtnEdn.addNewP();
		ctp.addNewPPr().addNewPStyle().setVal("FootnoteText");
		// 设置脚注内容及样式
		CTR ctr = ctp.addNewR();
		ctr.addNewRPr().addNewRStyle().setVal("FootnoteReference");
		ctr.addNewFootnoteRef();
		// 脚注文本 固定
		CTText cttext = ctp.addNewR().addNewT();
		cttext.setStringValue("这是脚注内容");
		cttext.setSpace(SpaceAttribute.Space.PRESERVE);
		// 添加脚注
		footnotes.addFootnote(ctFtnEdn);
		// 脚注关联word内容
		ctr = paragraph.getCTP().addNewR();
		//ctr = paragraph.getCTP().addNewR();
		ctr.addNewRPr().addNewRStyle().setVal("FootnoteReference");
		ctr.addNewFootnoteReference().setId(footNoteId);

		// 样式
		if (doc.getStyles()==null){
			doc.createStyles();
		}
		// 脚注链接样式
		CTStyle style = CTStyle.Factory.newInstance();
		style.setStyleId("FootnoteReference");
		style.setType(STStyleType.CHARACTER);
		style.addNewName().setVal("footnote reference");
		style.addNewBasedOn().setVal("DefaultParagraphFont");
		style.addNewUiPriority().setVal(new BigInteger("99"));
		style.addNewSemiHidden();
		style.addNewUnhideWhenUsed();
		style.addNewRPr().addNewVertAlign().setVal(STVerticalAlignRun.SUPERSCRIPT);
		// 添加脚注样式
		doc.getStyles().addStyle(new XWPFStyle(style));
		// 脚注文本样式
		style = CTStyle.Factory.newInstance();
		style.setType(STStyleType.PARAGRAPH);
		style.setStyleId("FootnoteText");
		style.addNewName().setVal("footnote text");
		style.addNewBasedOn().setVal("Normal");
		style.addNewLink().setVal("FootnoteTextChar");
		style.addNewUiPriority().setVal(new BigInteger("99"));
		style.addNewSemiHidden();
		style.addNewUnhideWhenUsed();
		CTRPr rpr = style.addNewRPr();
		rpr.addNewSz().setVal(new BigInteger("20"));
		rpr.addNewSzCs().setVal(new BigInteger("20"));
		// 添加脚注样式
		doc.getStyles().addStyle(new XWPFStyle(style));
		// 字符样式
		style  = CTStyle.Factory.newInstance();
		style.setStyleId("FootnoteTextChar");
		style.setType(STStyleType.CHARACTER);
		style.addNewName().setVal("Footnote Text Char");
		style.addNewBasedOn().setVal("DefaultParagraphFont");
		style.addNewLink().setVal("FootnoteText");
		style.addNewUiPriority().setVal(new BigInteger("99"));
		style.addNewSemiHidden();
		rpr = style.addNewRPr();
		rpr.addNewSz().setVal(new BigInteger("20"));
		rpr.addNewSzCs().setVal(new BigInteger("20"));
		// 添加脚注样式
		doc.getStyles().addStyle(new XWPFStyle(style));
	}

 之后doc回写word即可完成脚注添加

posted @ 2024-12-27 17:20  空知大仙人  阅读(77)  评论(0)    收藏  举报