package com.loongtao.report.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.HeaderFooter; import com.lowagie.text.Image; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Rectangle; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.rtf.RtfWriter2; import com.lowagie.text.rtf.field.RtfPageNumber; import com.lowagie.text.rtf.field.RtfTotalPageNumber; import com.lowagie.text.rtf.style.RtfParagraphStyle; /** * iText导出Word工具类 * * @author Mr.gao * */ public class WordUtil { public enum ExportPlan{ One,TWO } /** * Word中经常使用标题级别 * @author Mr.gao * */ public enum FontLevel{ ONE,TWO,THREE } /** * 导出Word * @param doc * @param path * @throws FileNotFoundException */ public void exportWord(Document doc,String path) throws FileNotFoundException{ FileOutputStream fos = new FileOutputStream(path); RtfWriter2.getInstance(doc, fos); } /** * 设置Word页眉或者页脚内容及对齐方式 * * @param headerContext * 页眉/页脚信息 * @param alignment * 对齐方式,例如:Rectangle.ALIGN_CENTER(居中) * @return HeaderFooter */ public HeaderFooter setHeaderFooter(String context,int alignment){ HeaderFooter hf = new HeaderFooter(new Phrase(context),false); hf.setAlignment(alignment); return hf; } /** * 设置Word中标题级别,查看FontLevel * @param level * 1-3级 * @return RtfParagraphStyle */ public RtfParagraphStyle setFontLevel(FontLevel level,String fontName){ RtfParagraphStyle r1 = null; switch (level) { case ONE: r1 = RtfParagraphStyle.STYLE_HEADING_1; r1.setStyle(Font.BOLD); r1.setSpacingAfter(5); break; case TWO: r1 = RtfParagraphStyle.STYLE_HEADING_2; r1.setStyle(Font.NORMAL); r1.setSpacingBefore(15); r1.setSpacingAfter(5); break; case THREE: r1 = RtfParagraphStyle.STYLE_HEADING_3; r1.setStyle(Font.NORMAL); r1.setIndentLeft(25); r1.setSpacingAfter(15); break; } r1.setFontName(fontName); return r1; } /** * 设置Word基础字体 * @param bf * BaseFont * @param size * 字号 * @param fontStyle * 字体样式,例如:com.lowagie.text.Font.BOLD * @return com.lowagie.text.Font */ public Font setFont(BaseFont bf,int size,int fontStyle){ Font f = new Font(bf,size,fontStyle); return f; } public Paragraph setPageNumber(){ RtfPageNumber number = new RtfPageNumber(); Paragraph parafooter = new Paragraph(); parafooter.add(new Phrase("第")); parafooter.add(number); parafooter.add(new Phrase("页 共")); parafooter.add(new RtfTotalPageNumber()); parafooter.add(new Phrase("页")); return parafooter; } /** * 在Word中建立段落及格式设置 * * 注意:<1>若是设置为标题,则将paragraphIdent,rowIndent设置为0便可,所创见的段落若是是一行,那么缩进量=paragraphIdent+rowIdent。 * * <2>其中paragraphIdent为段落缩进,指整个段落的所尽可能,而rowIdent为第一行的缩进量 * * <3>建议缩进量加起来范围在【0f-500f】,通常状况建议范围【30f】为两个汉字的缩进量。 * * <4>超出500f则文字继续向后对齐方式的反方向推移,超出Word纸张所显示的范围。 * * @param context * 页面内容 * @param font * 字体 * @param alignment * 对齐方式,例如:Element.ALIGN_CENTER * @param paragraphIdent * 设置段落缩进量 * @param rowIdent * 设置行缩进量 * @param spacingBefore * 段前距离,例如:50f * @param spacingAfter * 段后距离 * * @return Paragraph */ public Paragraph createParagraph(String context,Font font,int alignment,float paragraphIndent,float rowIndent,float spacingBefore,float spacingAfter){ Paragraph pg = new Paragraph(context,font); pg.setAlignment(alignment); pg.setIndentationLeft(paragraphIndent); pg.setFirstLineIndent(rowIndent); pg.setSpacingBefore(spacingBefore); pg.setSpacingAfter(spacingAfter); return pg; } /** * 添加指定路径图片 * * 如需经过网络,或者其余方式添加,查看Image.getInstance(); * @param filePath * 图片路径 * @param x * 长度 * @param y * 宽度 * @param alignment * 对其方式,例如:Image.MIDDLE * @return * @throws IOException * @throws MalformedURLException * @throws BadElementException */ public Image addImage(String filePath,float x,float y,int alignment) throws BadElementException, MalformedURLException, IOException{ Image image = Image.getInstance(filePath); image.scaleAbsolute(x, y); image.setAlignment(alignment); return image; } /** * 建立表格 * @param row * 行 * @param column * 列 * @param alignment * 对齐方式,例如:Table.ALIGN_CENTER * @param widths * 每一个列的宽度,列数组长度根据所建列数相同。例如:3行2列,那么数组长度为2;6行8列,那么数组长度为8 * @return Table * @throws DocumentException */ public Table createTable(int row,int column,int alignment,int []widths) throws DocumentException{ Table table = new Table(column,row); table.setBorderWidth(1f); // table.setAbsWidth("120px"); table.setAlignment(alignment); table.setWidths(widths); return table; } /** * 建立列 * @param e * Word中的Element元素,例如:图片、Table等 * @param headerFlag * 标题头部开关 * @param rowSpan * 如开启,则需写跨行,不然能够写0 * @param colSpan * 如开启,则需写跨列 * @return * @throws BadElementException */ public Cell createCell(Element e,boolean headerFlag,int rowSpan,int colSpan) throws BadElementException{ Cell cell = new Cell(e); cell.setBorder(0); if(headerFlag){ cell.setHeader(true); cell.setColspan(rowSpan); cell.setRowspan(colSpan); } return cell; } /** * 建立列 * @param context * 列中填充的内容 * @param headerFlag * 标题头部开关 * @param rowSpan * 如开启,则需写跨行,不然能够写0 * @param colSpan * 如开启,则需写跨列,不然能够写0 * @return * @throws BadElementException */ public Cell createCell(String context,boolean headerFlag,int rowSpan,int colSpan) throws BadElementException{ Cell cell = new Cell(context); cell.setBorder(1); if(headerFlag){ cell.setHeader(true); cell.setColspan(colSpan); cell.setRowspan(rowSpan); } return cell; } public static void main(String[] args) throws DocumentException, IOException, com.lowagie.text.DocumentException{ String filePath = "E:\\iText导出Word.doc"; exportWord(filePath); } public static void exportWord(String filePath) throws DocumentException, IOException, com.lowagie.text.DocumentException{ //建立Document实例 Document document = new Document(PageSize.A4); WordUtil ew = new WordUtil(); ew.exportWord(document,filePath); //打开文档 document.open(); document.setHeader(ew.setHeaderFooter("这是页眉", Rectangle.ALIGN_CENTER)); document.setFooter(ew.setHeaderFooter("这是页脚",Rectangle.ALIGN_CENTER)); //设置基础字体 Font baseFont = ew.setFont(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,BaseFont.EMBEDDED), 24, Font.BOLD); // BaseFont baseFont = BaseFont.createFont(); // Font contextFont = new Font(baseFont,12,Font.NORMAL); // Font titleFont = new Font(baseFont,24,Font.BOLD); // Font font = new Font(baseFont,15,Font.BOLD); document.add(ew.createParagraph("Itext", baseFont, Element.ALIGN_CENTER, 0f, 0f, 100f, 100f)); document.add(ew.createParagraph("这是新增的Paragraph", baseFont, Element.ALIGN_LEFT, 100f, 100f, 0f, 0f)); //正文内容 document.newPage(); document.add(ew.createParagraph("1、iText简介", ew.setFontLevel(FontLevel.ONE,"宋体"),Element.ALIGN_CENTER,200f, 200f, 100f, 100f)); document.newPage(); Paragraph p1 = ew.createParagraph("iText是著名的开放源码的站点sourceforge一个项目,是用于生产PDF文档的一个java类库。经过iText不只能够生成PDF或rtf的文档,并且能够将XML、HTML文件转化为PDF文件。" , ew.setFont(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,BaseFont.EMBEDDED), 14, Font.NORMAL),Element.ALIGN_CENTER,30f,0f,0f,0f); //p1.setLeading(25f); document.add(p1); Table table = ew.createTable(6, 8, Table.ALIGN_CENTER, new int[]{50,50,50,50,50,50,50,50}); table.addCell(ew.createCell("8", true, 0, 8)); table.endHeaders(); table.addCell(ew.createCell("这是第二个表格", false, 0, 0)); table.addCell(ew.createCell("这是第三个表格", false, 0, 0)); table.addCell(ew.createCell("这是第四个表格", false, 0, 0)); document.add(table); document.close(); } }