首页 > 解决方案 > 无效的 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");

在此处输入图像描述

标签: javaapache-poi

解决方案


直到现在还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();

 }
}

推荐阅读