我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。
有谁有办法实现这一目标?
XWPFDocument docx = (XWPFDocument) dockingObject; CTSectPr sectPr = docx.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy policy = new WPFHeaderFooterPolicy(docx, sectPr); XWPFHeader header = policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT); // somthing like: header.createTable();
任何帮助将不胜感激!
亲切的问候…
〜丹尼尔
这可以使用公共XWPFTable insertNewTbl(org.apache.xmlbeans.XmlCursor游标)来实现。
方法:在标题中创建一个新段落。然后org.apache.xmlbeans.XmlCursor从该org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP段获得。然后插入该光标定位的表。
org.apache.xmlbeans.XmlCursor
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP
例:
import java.io.*; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.apache.xmlbeans.XmlCursor; import java.math.BigInteger; public class CreateWordHeaderFooterTable { public static void main(String[] args) throws Exception { XWPFDocument doc= new XWPFDocument(); // the body content XWPFParagraph paragraph = doc.createParagraph(); XWPFRun run=paragraph.createRun(); run.setText("The Body:"); paragraph = doc.createParagraph(); run=paragraph.createRun(); run.setText("Lorem ipsum...."); // create header-footer CTSectPr sectPr = doc.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(doc, sectPr); // create header start XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT); paragraph = header.getParagraphArray(0); if (paragraph == null) paragraph = header.createParagraph(); paragraph.setAlignment(ParagraphAlignment.LEFT); run = paragraph.createRun(); run.setText("The Header:"); // create table in header paragraph = header.createParagraph(); XmlCursor cursor = paragraph.getCTP().newCursor(); XWPFTable table = header.insertNewTbl(cursor); XWPFTableRow row = table.getRow(0); if (row == null) row = table.createRow(); int twipsPerInch = 1440; table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(6 * twipsPerInch)); for (int i = 0; i < 3; i++) { XWPFTableCell cell = row.getCell(i); if (cell == null) cell = row.createCell(); CTTblWidth tblWidth = cell.getCTTc().addNewTcPr().addNewTcW(); tblWidth.setW(BigInteger.valueOf(2 * twipsPerInch)); tblWidth.setType(STTblWidth.DXA); paragraph = cell.getParagraphs().get(0); run = paragraph.createRun(); run.setText("Header Table Cell " + i); } // create footer start XWPFFooter footer = headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT); paragraph = footer.getParagraphArray(0); if (paragraph == null) paragraph = footer.createParagraph(); paragraph.setAlignment(ParagraphAlignment.CENTER); run = paragraph.createRun(); run.setText("The Footer:"); doc.write(new FileOutputStream("CreateWordHeaderFooterTable.docx")); } }