直接上代码,代码很简单没什么难度。
import java.io.FileOutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.usermodel.Borders; import org.apache.poi.xwpf.usermodel.BreakClear; import org.apache.poi.xwpf.usermodel.BreakType; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_页眉_S3_Test { public static void main(String[] args) throws Exception { POI_页眉_S3_Test t=new POI_页眉_S3_Test(); System.out.println("------------------------简单文字页脚-----------------"); t.simpleFooter("f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); System.out.println("------------------------简单文字页眉页脚-----------------"); XWPFDocument document = new XWPFDocument(); t.simpleDateHeader(document); t.createSimpleTable(document); t.addNewPage(document, BreakType.PAGE); String str="测试测试测试测试测试文本测试测试测试测试测试文本测试\r\n测试测试测试测试文本测试测试测试测试测试文本测试"; t.addSimpleParagraph(document, str, "宋体",11,"FF0000", true, false); t.addNewPage(document, BreakType.COLUMN); t.addSimpleParagraph(document, str,"微软雅黑",12, "00FF00", false, true); t.addNewPage(document, BreakType.TEXT_WRAPPING); t.addSimpleParagraph(document, str,"楷体",13, "0000FF", true, true); t.addBreakClear(document, BreakClear.ALL); t.addSimpleParagraph(document, str,"黑体",14,"000000", false, false); t.simpleNumberFooter(document); t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } /** * @Description: 文字页脚 * @see: http://www.coderanch.com/t/525626/java/java/Adding-Header-Footer-Word-Document */ public void simpleFooter(String savePath) throws Exception { XWPFDocument document = new XWPFDocument(); CTP ctp = CTP.Factory.newInstance(); CTR ctr = ctp.addNewR(); CTText textt = ctr.addNewT(); textt.setStringValue( "测试" ); XWPFParagraph codePara = new XWPFParagraph( ctp, document ); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr ); headerFooterPolicy.createFooter( STHdrFtr.DEFAULT, newparagraphs ); headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs ); FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } //页脚:显示页码信息 public void simpleNumberFooter(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); r1.setText("第"); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页 总共"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("NUMPAGES \\* MERGEFORMAT "); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderTop(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr); headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, newparagraphs); } public void simpleDateHeader(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"EEEE\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("年"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"O\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("月"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"A\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("日"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderBottom(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr); headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs); } public void addNewPage(XWPFDocument document,BreakType breakType){ XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakType); } public void addBreakClear(XWPFDocument document,BreakClear breakClear){ XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakClear); } //TODO 写的时候遇到过一次数组越界,测试几次都没法重现 public void addSimpleParagraph(XWPFDocument document,String text,String fontName,int fontSize,String color,boolean isBold,boolean isItalic){ XWPFParagraph xp = document.createParagraph(); XWPFRun r1 = xp.createRun(); r1.setText(text); r1.setFontSize(fontSize); r1.setBold(isBold); r1.setItalic(isItalic); r1.setColor(color); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii(fontName); fonts.setEastAsia(fontName); fonts.setHAnsi(fontName); xp.setAlignment(ParagraphAlignment.CENTER); xp.setVerticalAlignment(TextAlignment.CENTER); } //注意: 代码采用的是先写数据再写表头 public void createSimpleTable(XWPFDocument doc) throws Exception { List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); XWPFTable table = doc.createTable(2,5); CTTbl ttbl = table.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); CTJc cTJc=tblPr.addNewJc(); cTJc.setVal(STJc.Enum.forString("center")); tblWidth.setW(new BigInteger("8000")); tblWidth.setType(STTblWidth.DXA); XWPFTableRow firstRow=null; XWPFTableRow secondRow=null; XWPFTableCell firstCell=null; XWPFTableCell secondCell=null; for(int i=0;i<2;i++){ firstRow=table.getRow(i); firstRow.setHeight(380); for(int j=0;j<5;j++){ firstCell=firstRow.getCell(j); setCellText(firstCell, "测试", null, 1600); } } firstRow=table.insertNewTableRow(0); secondRow=table.insertNewTableRow(1); firstRow.setHeight(380); secondRow.setHeight(380); for(String str:columnList){ if(str.indexOf("|") == -1){ firstCell=firstRow.addNewTableCell(); secondCell=secondRow.addNewTableCell(); createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART); createVSpanCell(secondCell, "", "CCCCCC", 1600,null); }else{ String[] strArr=str.split("\\|"); firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART); for(int i=1;i<strArr.length-1;i++){ firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, "","CCCCCC",1600,null); } for(int i=1;i<strArr.length;i++){ secondCell=secondRow.addNewTableCell(); setCellText(secondCell, strArr[i], "CCCCCC", 1600); } } } } public void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cell.setVerticalAlignment(XWPFVertAlign.CENTER); CTTcPr ctPr = cttc.addNewTcPr(); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } public void createHSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewHMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void createVSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewVMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void saveDocument(XWPFDocument document,String savePath) throws Exception{ FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } }
结果为:
------------------------简单文字页脚-----------------
------------------------简单文字页眉页脚-----------------
转载请注明原处,原文链接:http://53873039oycg.iteye.com/blog/2149884 ,谢谢。
全文完。
相关推荐
在本主题中,我们将深入探讨如何使用POI库来导出Word文档,并进行页眉、页脚和标题的设置。这个过程涉及到对Word文档的高级布局控制,对于自动化报告生成或批量创建文档非常有用。 1. **Apache POI简介** Apache ...
在本教程中,我们将重点讨论如何利用Apache POI 3.13版本来导出Word文档,并结合图片操作。 首先,Apache POI提供了一个叫做HWPF(Horrible Word Processor Format)的API来处理老版的Word(.doc)文件,而XWPF...
《使用Apache POI库导出Word文档》 在Java编程中,处理Microsoft Office文档时,Apache POI是一个不可或缺的库。POI项目提供了一系列API,允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel、Word...
Java 生成word文件,带样式,带页眉,带页码,带图片,带表格,需要相关iText包,包可在http://download.csdn.net/detail/wuxinxing1981/8055977 链接下载。
此外,由于这个"poi导出word文档jar包"的描述比较简单,可能包含了其他相关的jar包或工具,比如可能包含了处理图片、模板或者样式文件的工具。在具体应用时,你需要根据实际情况检查和使用这些资源,以确保完整地...
在实际应用中,可能还需要处理更多细节,如样式继承、页眉页脚的设置、列表的创建、书签和超链接的添加等。此外,为了提高性能,可以考虑使用低内存模式或者延迟加载策略,尤其是在处理大型文档时。总之,Apache POI...
在Word中,页码通常通过页眉或页脚来显示。在POI中,我们可以通过以下方式实现: 1. 创建或获取页眉/页脚对象,`XWPFHeaderFooterPolicy`可以帮助我们管理文档的页眉和页脚。 2. 创建一个新的段落(`XWPFParagraph`)...
- **写入Word内容**: XWPF允许创建新的Word文档,添加和编辑段落、表格、图片,甚至可以插入和格式化页眉、页脚、书签等。 4. **项目实践** "poiTest"项目中可能包含了以下内容: - **示例代码**: 展示如何使用...
在这个"java poi导出word文档DEMO"中,我们将深入探讨如何使用Java POI库来创建和导出Word文档。 首先,我们需要在项目中引入Apache POI的相关依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml ...
在实际开发中,你可能还需要处理更复杂的需求,如嵌入表格、链接、页眉页脚、样式表等。Java POI提供了丰富的API来满足这些需求。记得在项目中添加上述提到的jar包,以便正确地使用和编译代码。 总的来说,Java POI...
- 处理复杂格式:Word模板可能包含复杂的格式,如图片、表格、页眉页脚等,这些都需要额外处理。 - 错误处理:在代码中添加适当的错误处理,以应对文件不存在、转换失败等情况。 通过以上步骤,你可以利用Apache ...
这个例子只是一个起点,实际应用中可能需要更复杂的逻辑,例如处理表格、页眉页脚、条件语句等。在调试过程中,确保正确设置图片的位置,以及模板路径的准确性是至关重要的。 总之,Apache POI为Java开发者提供了一...
- Section: 是Range的一部分,是文档的基本结构单元,通常包含页眉、页脚和主体内容。 2. **创建Word文档** 使用POI创建Word文档首先需要创建`HWPFDocument`实例,然后通过`DocumentBuilder`添加文本、样式、段落...
8. HSSFHeader和HSSFFooter:分别表示工作表的页眉和页脚。 9. HSSFCellStyle:定义单元格样式,包括对齐方式、边框、填充等。 10. HSSFDateUtil:用于处理Excel中的日期。 11. HSSFPrintSetup:配置打印设置,如页...
UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑...笔者使用Springmvc+mybatis+maven搭建,并实现插入图片、文字、表格转word,rar包中有具体的代码。 运行需将jacob下的dll拷贝至jdk/jre/bin目录下
本篇文章将深入探讨如何使用Apache POI在Java中创建和导出Word文档。 首先,我们需要在项目中引入Apache POI库。`pom.xml`文件中的依赖配置通常是这样的: ```xml <groupId>org.apache.poi <artifactId>poi ...
除了基本的文本操作,POI还支持更复杂的功能,如创建表格、插入图片、定义页眉和页脚、添加样式表等。例如,要创建一个表格,你可以使用`XWPFDocument`的`createTable()`方法,然后添加行和单元格。 ```java ...
这可能是一个示例程序或模板文件,用于演示如何使用POI导出Word模板。在实践中,你可以参考这个示例代码,了解具体实现的细节。 总之,Apache POI为Java开发者提供了强大且灵活的手段来操作Word文档,无论是读取、...
除了基本的文本操作,Apache POI还支持更复杂的功能,如插入图片、表格、页眉和页脚、样式设置等。例如,你可以使用`XWPFParagraph`的`setParagraphAlignment`方法来设置段落对齐方式,或者使用`XWPFRun`的`...
POI还支持更复杂的操作,如页眉和页脚的添加、书签、自动编号、脚注和批注等。对于这些功能,需要使用相应的API接口进行设置。 8. **性能优化**: 处理大型文档时,POI可能会消耗大量内存。为了避免内存溢出,...