Apache POI Word - 页眉页脚
概述
本文介绍如何使用 XWPFHeaderFooterPolicy 和 XWPFHeaderFooterPolicy 给文档创建页眉和页脚。
页眉
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.FileOutputStream;
import java.io.IOException;
public class HeaderFooterDoc {
public static void main(String[] args) throws IOException {
try (XWPFDocument doc = new XWPFDocument()) {
try (FileOutputStream out = new FileOutputStream("D:\\tmp\\header.docx")) {
// 页眉策略
XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();
// 创建页眉
XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);
// 往页面添加内容
XWPFParagraph headerParagraph = header.createParagraph();
XWPFRun headerRun = headerParagraph.createRun();
headerRun.setText("这是页眉内容");
doc.write(out);
}
}
}
}
在创建页眉之前,先需要一个页眉策略,页眉策略总共有三种:
- XWPFHeaderFooterPolicy.DEFAULT
- XWPFHeaderFooterPolicy.EVEN
- XWPFHeaderFooterPolicy.FIRST
创建页眉对象之后,通过 header.createParagraph()
创建一个段落,之后的操作大家应该都很熟悉了,如果还不知道怎么操作段落,可以参考我之前的文章。
页眉的内容并不局限于文字,可以往页眉里添加图片。
页脚
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.FileOutputStream;
import java.io.IOException;
public class HeaderFooterDoc {
public static void main(String[] args) throws IOException {
try (XWPFDocument doc = new XWPFDocument()) {
try (FileOutputStream out = new FileOutputStream("D:\\tmp\\footer.docx")) {
XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();
XWPFFooter footer = headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT);
XWPFParagraph footerParagraph = footer.createParagraph();
XWPFRun run = footerParagraph.createRun();
run.setText("这是页脚内容");
doc.write(out);
}
}
}
}
页脚的操作和页眉操作步骤几乎一模一样,这里不再赘述。
兼容性说明
以上代码在 WPS 中不能正常显示页眉和页脚。
这个问题暂时有两种解决方案,一种是利用其他的工具,例如:Aspose.Words,但该工具是收费的,如果费用不是问题,完全可以考虑使用 Aspose.Words;另外一种可以考虑使用一个模板文档,在这个模板文档中设置好页眉,然后读取该文档,并在此基础上替换页眉中的内容(如果有需要的话),然后继续生成其他内容。
try (InputStream in = new FileInputStream("D:\\tmp\\header-template-wps.docx")) {
try (XWPFDocument doc = new XWPFDocument(in)) {
try (FileOutputStream out = new FileOutputStream("D:\\tmp\\myDoc.docx")) {
// 页眉一般是每一页都有,因此是个 List
List<XWPFHeader> headerList = doc.getHeaderList();
for (XWPFHeader hd : headerList) {
XWPFRun run = hd.getParagraphs().get(0).getRuns().get(0);
// 替换页眉中的文字
run.setText("this is override header");
}
doc.write(out);
}
}
}
这段代码中,header-template-wps.docx 便是模板。可以使用 WPS Office 制作这个模板,然后添加一个页眉,然后再页眉中添加文字,具体什么文字不重要,这个文字就是一个占位符,后面会替换掉这段文字。 当然如果页眉是固定的,那么替换都不需要了。
有问题吗?点此反馈!
温馨提示:反馈需要登录