java - 无效的 Apache POI HeaderFooterType.EVEN
问题描述
Apache POI 3.17
XWPFDocument document = new XWPFDocument();
document
.createHeader(HeaderFooterType.EVEN)
.createParagraph()
.createRun()
.setText("even");
生成的Word文档中没有任何内容
HeaderFooterType.DEFAULT or HeaderFooterType.FIRST
这两个是有效的
document
.createHeader(HeaderFooterType.DEFAULT)
.createParagraph()
.createRun()
.setText("default");
解决方案
直到现在还apache poi
没有设置<w:evenAndOddHeaders/>
in /word/settings.xml
。但是当在Word
.
不幸的是,似乎没有一种方法可以获取XWPFSettings
和 低级别org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings
。所以我在我的例子中使用了反射 API。
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import java.lang.reflect.Field;
public class CreateWordHeaderFooterType {
public static void main(String[] args) throws Exception {
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph;
XWPFRun run;
// the body content
paragraph = document.createParagraph();
run=paragraph.createRun();
run.setText("Lorem ipsum.... page 1");
paragraph = document.createParagraph();
run=paragraph.createRun();
run.addBreak(BreakType.PAGE);
run.setText("Lorem ipsum.... page 2");
// create even header
document
.createHeader(HeaderFooterType.EVEN)
.createParagraph()
.createRun()
.setText("even");
// set evenAndOddHeaders in settings.xml
Field _settings = XWPFDocument.class.getDeclaredField("settings");
_settings.setAccessible(true);
XWPFSettings xwpfsettings = (XWPFSettings)_settings.get(document);
Field _ctSettings = XWPFSettings.class.getDeclaredField("ctSettings");
_ctSettings.setAccessible(true);
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings ctsettings =
(org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings)_ctSettings.get(xwpfsettings);
ctsettings.addNewEvenAndOddHeaders();
document.write(new FileOutputStream("CreateWordHeaderFooterType.docx"));
document.close();
}
}
推荐阅读
- mysql - 将两个 SQL 结果组合成一个具有不同列名的行中的结果集
- sql-server - 如何创建一个允许您传递参数的函数
- java - 在 Jboss7.x 中为 mysql 的 Http 会话持久性创建默认表时出错
- php - 如何使用 PHP 获取输入的值
- google-app-engine - Google 应用引擎,30 秒后请求超时,F2 实例
- python - 为什么这会出现超出最大尝试次数的错误?
- mysql - 针对极慢查询的 MySQL 查询优化
- python - 对加速度进行数值积分的更好方法
- python - Matplotlib:更新图形后交互式缩放工具中的错误
- c# - 为什么 NodaTime.LocalDate.MinIsoValue 有年份“9999”