`
53873039oycg
  • 浏览: 843780 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]poi 创建word2007脚注(FootNote)

    博客分类:
  • poi
 
阅读更多

         直接上代码:

        

import java.io.FileOutputStream;
import java.math.BigInteger;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFootnotes;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdnRef;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHighlight;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalAlignRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFtnEdn;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;

public class POI_创建脚注_S3_Test {
	public static void main(String[] args) throws Exception {
		POI_创建脚注_S3_Test t = new POI_创建脚注_S3_Test();
		t.testAddFootnotesToDocument("f:/saveFile/temp/sys_"
				+ System.currentTimeMillis() + ".docx");
	}

	public void testAddFootnotesToDocument(String savePath) throws Exception {
		XWPFDocument xdoc = new XWPFDocument();
		XWPFParagraph p2 = xdoc.createParagraph();
		setParagraphTextStyleInfo(p2, false, "测试", "微软雅黑", "000000", "22",
				false, false, false, false, 0, null, false, 0, null);
		BigInteger noteId = BigInteger.valueOf(1);
		addFootNote(xdoc, p2, noteId, "参见1.1.1", null, null, "微软雅黑", "FF0000",
				"18", true, false, false, false, 0, null, false, 0,
				STVerticalAlignRun.SUPERSCRIPT);
		setParagraphTextStyleInfo(p2, true, "插", "微软雅黑", "000000", "22", false,
				false, false, false, 0, null, false, 0, null);

		noteId = noteId.add(BigInteger.ONE);
		addFootNote(xdoc, p2, noteId, "参见1.1.2", "[", "]", "微软雅黑", "000000",
				"18", false, false, false, false, 0, null, false, 0,
				STVerticalAlignRun.SUPERSCRIPT);
		setParagraphTextStyleInfo(p2, true, "入脚注", "微软雅黑", "000000", "22",
				false, false, false, false, 0, null, false, 0, null);

		noteId = noteId.add(BigInteger.ONE);
		addFootNote(xdoc, p2, noteId, "参见1.1.3", "[", "]", "微软雅黑", "000000",
				"18", false, false, false, false, 0, null, false, 0,
				STVerticalAlignRun.SUPERSCRIPT);
		saveDocument(xdoc, savePath);
	}

	public void addFootNote(XWPFDocument xdoc, XWPFParagraph p,
			BigInteger noteId, String noteContent, String notePrefix,
			String noteSuffix, String fontFamily, String colorVal,
			String fontSize, boolean isBlod, boolean isItalic,
			boolean isStrike, boolean isUnderLine, int underLineStyle,
			String underLineColor, boolean isHightLight, int hightLightValue,
			STVerticalAlignRun.Enum stRunEnum) {
		XWPFRun r1 = null;
		if (notePrefix != null) {
			r1 = p.createRun();
			setRunTextStyleInfo(r1, notePrefix, fontFamily, colorVal, fontSize,
					isBlod, isItalic, isStrike, isUnderLine, underLineStyle,
					underLineColor, isHightLight, hightLightValue, stRunEnum);
		}
		r1 = p.createRun();
		setRunTextStyleInfo(r1, null, fontFamily, colorVal, fontSize, isBlod,
				isItalic, isStrike, isUnderLine, underLineStyle,
				underLineColor, isHightLight, hightLightValue, stRunEnum);
		CTFtnEdnRef fr = r1.getCTR().addNewFootnoteReference();
		fr.setId(noteId);

		if (noteSuffix != null) {
			r1 = p.createRun();
			setRunTextStyleInfo(r1, noteSuffix, fontFamily, colorVal, fontSize,
					isBlod, isItalic, isStrike, isUnderLine, underLineStyle,
					underLineColor, isHightLight, hightLightValue, stRunEnum);
		}

		XWPFFootnotes footnotes = xdoc.createFootnotes();
		CTFtnEdn ctNote = null;
		CTP ctp = null;
		XWPFParagraph p2 = null;
		ctNote = CTFtnEdn.Factory.newInstance();
		ctNote.setId(noteId);
		ctNote.setType(STFtnEdn.NORMAL);

		ctp = ctNote.addNewP();
		p2 = new XWPFParagraph(ctp, xdoc);
		if (notePrefix != null) {
			r1 = p2.createRun();
			setRunTextStyleInfo(r1, notePrefix, fontFamily, colorVal, fontSize,
					isBlod, isItalic, isStrike, isUnderLine, underLineStyle,
					underLineColor, isHightLight, hightLightValue, stRunEnum);
		}

		r1 = p2.createRun();
		setRunTextStyleInfo(r1, null, fontFamily, colorVal, fontSize, isBlod,
				isItalic, isStrike, isUnderLine, underLineStyle,
				underLineColor, isHightLight, hightLightValue, stRunEnum);
		r1.getCTR().addNewFootnoteRef();

		if (noteSuffix != null) {
			r1 = p2.createRun();
			setRunTextStyleInfo(r1, noteSuffix, fontFamily, colorVal, fontSize,
					isBlod, isItalic, isStrike, isUnderLine, underLineStyle,
					underLineColor, isHightLight, hightLightValue, stRunEnum);
		}

		r1 = p2.createRun();
		CTText ctText = r1.getCTR().addNewT();
		ctText.setStringValue(" ");
		ctText.setSpace(SpaceAttribute.Space.PRESERVE);

		r1 = p2.createRun();
		setRunTextStyleInfo(r1, noteContent, fontFamily, colorVal, fontSize,
				isBlod, isItalic, isStrike, isUnderLine, underLineStyle,
				underLineColor, isHightLight, hightLightValue, stRunEnum);
		footnotes.addFootnote(ctNote);
	}

	public void setRunTextStyleInfo(XWPFRun pRun, String content,
			String fontFamily, String colorVal, String fontSize,
			boolean isBlod, boolean isItalic, boolean isStrike,
			boolean isUnderLine, int underLineStyle, String underLineColor,
			boolean isHightLight, int hightLightValue,
			STVerticalAlignRun.Enum stRunEnum) {
		if (content != null) {
			pRun.setText(content);
		}
		CTRPr pRpr = null;
		if (pRun.getCTR() != null) {
			pRpr = pRun.getCTR().getRPr();
			if (pRpr == null) {
				pRpr = pRun.getCTR().addNewRPr();
			}
		}

		if (fontFamily != null) {
			// 设置字体
			CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr
					.addNewRFonts();
			fonts.setAscii(fontFamily);
			fonts.setEastAsia(fontFamily);
			fonts.setHAnsi(fontFamily);
		}

		if (fontSize != null) {
			// 设置字体大小
			CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
			sz.setVal(new BigInteger(fontSize));
			CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr
					.addNewSzCs();
			szCs.setVal(new BigInteger(fontSize));
		}

		if (colorVal != null) {
			pRun.setColor(colorVal);
		}

		// 设置字体样式
		if (isBlod) {
			pRun.setBold(isBlod);
		}
		if (isItalic) {
			pRun.setItalic(isItalic);
		}
		if (isStrike) {
			pRun.setStrike(isStrike);
		}
		if (colorVal != null) {
			pRun.setColor(colorVal);
		}

		// 设置下划线样式
		if (isUnderLine) {
			CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU();
			u.setVal(STUnderline.Enum.forInt(Math.abs(underLineStyle % 19)));
			if (underLineColor != null) {
				u.setColor(underLineColor);
			}
		}
		// 设置字突出显示文本
		if (isHightLight) {
			if (hightLightValue > 0 && hightLightValue < 17) {
				CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr
						.getHighlight() : pRpr.addNewHighlight();
				hightLight
						.setVal(STHighlightColor.Enum.forInt(hightLightValue));
			}
		}

		if (stRunEnum != null) {
			CTVerticalAlignRun ctV = CTVerticalAlignRun.Factory.newInstance();
			ctV.setVal(stRunEnum);
			pRpr.setVertAlign(ctV);
		}
	}

	public void setParagraphTextStyleInfo(XWPFParagraph p, boolean isNew,
			String content, String fontFamily, String colorVal,
			String fontSize, boolean isBlod, boolean isItalic,
			boolean isStrike, boolean isUnderLine, int underLineStyle,
			String underLineColor, boolean isHightLight, int hightLightValue,
			STVerticalAlignRun.Enum stRunEnum) {
		XWPFRun pRun = null;
		if (isNew) {
			pRun = p.createRun();
		} else {
			if (p.getRuns() != null && p.getRuns().size() > 0) {
				pRun = p.getRuns().get(0);
			} else {
				pRun = p.createRun();
			}
		}
		if (content != null) {
			pRun.setText(content);
		}

		CTRPr pRpr = null;
		if (pRun.getCTR() != null) {
			pRpr = pRun.getCTR().getRPr();
			if (pRpr == null) {
				pRpr = pRun.getCTR().addNewRPr();
			}
		}

		// 设置字体
		CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr
				.addNewRFonts();
		fonts.setAscii(fontFamily);
		fonts.setEastAsia(fontFamily);
		fonts.setHAnsi(fontFamily);

		// 设置字体大小
		CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
		sz.setVal(new BigInteger(fontSize));

		CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr
				.addNewSzCs();
		szCs.setVal(new BigInteger(fontSize));

		if (colorVal != null) {
			pRun.setColor(colorVal);
		}

		// 设置字体样式
		if (isBlod) {
			pRun.setBold(isBlod);
		}
		if (isItalic) {
			pRun.setItalic(isItalic);
		}
		if (isStrike) {
			pRun.setStrike(isStrike);
		}
		if (colorVal != null) {
			pRun.setColor(colorVal);
		}

		// 设置下划线样式
		if (isUnderLine) {
			CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU();
			u.setVal(STUnderline.Enum.forInt(Math.abs(underLineStyle % 19)));
			if (underLineColor != null) {
				u.setColor(underLineColor);
			}
		}
		// 设置突出显示文本
		if (isHightLight) {
			if (hightLightValue > 0 && hightLightValue < 17) {
				CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr
						.getHighlight() : pRpr.addNewHighlight();
				hightLight
						.setVal(STHighlightColor.Enum.forInt(hightLightValue));
			}
		}

		if (stRunEnum != null) {
			CTVerticalAlignRun ctV = CTVerticalAlignRun.Factory.newInstance();
			ctV.setVal(stRunEnum);
			pRpr.setVertAlign(ctV);
		}
	}

	public void saveDocument(XWPFDocument document, String savePath)
			throws Exception {
		FileOutputStream fos = new FileOutputStream(savePath);
		document.write(fos);
		fos.close();
	}
}

    结果为:

   

 

        转载请注明原处,原文链接:http://53873039oycg.iteye.com/blog/2158635  ,谢谢
--------------------------------------------顺便说一句--------------------------------------------
        使用上述方法创建批注(comment)或者尾注(endnote)是不可行的,到目前为止,尚未发现有效的方法使用poi新增批注或者尾注,如果有这方便的需求,请使用docx4j,至少docx4j在git上面的samples里包含了怎么创建comment,其他的如怎么使用poi创建书签(bookmark)这种简单的功能就不写了,修改书签网上也有现成的代码。
        全文完

 

  • 大小: 5.4 KB
  • 大小: 12.5 KB
0
1
分享到:
评论

相关推荐

    POI读取 word 2003 和 word 2007 的例子

    这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...

    POI解析word2007文本及图片(已测试).doc

    Apache POI 解析 Word 2007 文本及图片 Apache POI (Poor Obfuscation Implementation) 是一个 Java 库,用于读取和写入 Microsoft Office 文件,包括 Word、Excel、PowerPoint 等。 Apache POI 提供了对 Word ...

    [简单]poi读取word 2007简单文本框值

    标题中的“poi读取word 2007简单文本框值”指的是使用Apache POI库来读取Microsoft Word 2007文档中简单文本框内的文本内容。Apache POI是一个流行的开源Java库,用于处理Microsoft Office格式的文件,如Word(.docx...

    POI 替换word2007文本框的值

    在本文中,我们将深入探讨如何使用POI库来替换Word2007文档中的文本框值,这对于自动化报告生成、批量文档编辑以及模板驱动的文档创建等场景非常有用。 首先,我们需要了解Word2007文档(.docx)的内部结构。它是...

    简单poi创建word文档源码

    ### 使用Apache POI创建Word文档的关键知识点 #### 一、Apache POI简介 Apache POI是一个流行的Java库,用于处理Microsoft Office格式的文件,包括Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)。它提供了...

    POI导出Word 页眉 页脚 标题设置

    下面是一个简单的示例,演示了如何创建一个带有页眉、页脚和标题的Word文档: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.*; public class PoiWordExample { ...

    POI报表Word导出

    POI报表Word导出

    poi解析excel、word2007,2010等版本

    本项目中的"poiTest"是一个Web应用示例,它演示了如何使用Apache POI来解析不同版本的Excel(如2007、2010)以及Word2007和2010文档。 1. **Apache POI 简介** Apache POI 是由Apache软件基金会开发的一个项目,...

    poi完美word转html

    首先,通过创建HWPFDocument对象来读取Word文档。然后,使用WordToHtmlConverter进行转换,同时定义PicturesManager来处理文档中的图片,确保它们能在HTML中正确显示。最后,将转换后的HTML内容写入到指定的文件中。...

    poi操作word书签,兼容2003和2007

    下载后,运行 可以 Test1中的main方法,注意里面的word模版地址要修改下。 test1.java主要是针对word的书签操作 MSWordTool.java主要是针对word的列表书签的操作,相对来说比较复杂,具体看个人需求。

    使用poi替换word中的图片

    在IT领域,Apache POI是一个广泛使用的开源库,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本篇将深入探讨如何使用Apache POI库来替换Word...

    POI操作Word中插入文本和图片

    Apache POI提供了一套完整的API,使得在Java中操作Word文档变得简单。无论是插入文本还是图片,都可以灵活控制内容和样式。利用这些功能,你可以构建出复杂的动态报告模板,满足各种业务需求。在实际开发中,还可以...

    使用java Apache poi 根据word模板生成word报表例子

    使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701

    利用poi+word模版书签,向word中插入数据

    本教程将深入讲解如何利用Apache POI的XWPF模块结合Word模板中的书签,实现数据的动态插入,从而创建个性化的Word文档。 首先,我们需要理解Apache POI的XWPF模块。XWPF(XML Word Processing)是POI项目的一部分,...

    基于poi导出word以及图片

    通过以上步骤,你就可以使用Apache POI 3.13来创建、编辑并导出包含文本和图片的Word文档了。注意,这只是一个基础示例,实际应用中可能需要处理更复杂的情况,比如样式设置、页眉页脚、页码等。在处理大量数据时,...

    poi将word转换成html、样式 表格 图片处理

    实际编程中,你可以创建一个方法,接受Word文档的输入流和HTML输出流,使用Apache POI读取Word,构建HTML结构,并写入到输出流中。这样就可以实现Word到HTML的在线转换服务。 通过以上步骤,我们可以利用Apache ...

    POI实现word和excel在线预览

    在IT行业中,Apache POI是一个广泛使用的库,主要用于读取、写入Microsoft Office格式的文件,包括Word(.doc/.docx)和Excel(.xls/.xlsx)文档。本项目提供的"POI实现word和excel在线预览"是基于Apache POI的一个...

    poiWord2003和Word2007包括图片完整转换成html 包括完整Jar包

    1. **Apache POI基础**:Apache POI提供了HSSF和XSSF两个API,分别用于读写老版本的BIFF8格式(如Word2003的.doc文件)和新的OOXML格式(如Word2007的.docx文件)。HSSF对应于Excel,而XSSF则对应于Word和PowerPoint...

Global site tag (gtag.js) - Google Analytics