生成Word文檔的類庫有不少,經常使用的有jacob,poi,itext等等,jacob操做office的能力是不錯的,可是對於我我的來講,我不喜歡它的兩方面:1、jacob只能應用於windows平臺。2、除了要把相應的ar包加載到類路徑下,還須要把jacob.dll複製到windows/system32目錄中。poi操做excel方面的能力很是強大,對於word方面的操做能力仍是不夠的。 如今來講說IText吧。IText是用於生成PDF文檔的一個java類庫。經過iText不只能夠生成PDF或rtf的文檔,並且能夠將XML、Html文件轉化爲PDF文件。固然也能夠生成word文檔。並且操做方法簡單。使用IText須要3個jar包:iText-2.1.7.jar(核心包),iTextAsian.jar(解決中文輸出問題),itext-rtf-2.1.7.jar(操做rtf格式)。(最後會提供jar包與實例下載)。 用iText生成Word文檔須要5個步驟:
①創建com.lowagie.text.Document對象的實例。 Document document = new Document();java
②創建一個書寫器(Writer)與document對象關聯,經過書寫器(Writer)能夠將文檔寫入到磁盤中。 RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));
③打開文檔。windows
document.open();
④向文檔中添加內容。字體
document.add(new Paragraph("Hello World"));
⑤關閉文檔。(在最後必須關閉文檔,不然即便生成了word文檔也會打不開)this
document.close(); 下面提供一個通用文件給你們:
public class WordUtils { private Document document; private BaseFont bfChinese;.net
public BaseFont getBfChinese() { return bfChinese; } public void setBfChinese(BaseFont bfChinese) { this.bfChinese = bfChinese; } public Document getDocument() { return document; } public void setDocument(Document document) { this.document = document; } public WordUtils(){ this.document = new Document(PageSize.A4);//設置紙張大小 } /** 創建一個書寫器(Writer)與document對象關聯,經過書寫器(Writer)能夠將文檔寫入到磁盤中 * @param filePath 要操做的文檔路徑,若文檔不存在會自動建立 * @throws com.lowagie.text.DocumentException * @throws java.io.IOException */ public void openDocument(String filePath) throws DocumentException, IOException {
// 創建一個書寫器(Writer)與document對象關聯,經過書寫器(Writer)能夠將文檔寫入到磁盤中
RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));
this.document.open();
// 設置中文字體
this.bfChinese = BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); }excel
/** * @param titleStr 標題 * @param fontsize 字體大小 * @param fontStyle 字體樣式 * @param elementAlign 對齊方式 * @throws com.lowagie.text.DocumentException */ public void insertTitle(String titleStr,int fontsize,int fontStyle,int elementAlign) throws DocumentException{ Font titleFont = new Font(this.bfChinese, fontsize, fontStyle); Paragraph title = new Paragraph(titleStr); // 設置標題格式對齊方式 title.setAlignment(elementAlign); title.setFont(titleFont); this.document.add(title); } /** * 設置帶有目錄格式的標題(標題1格式) * * @param rtfParagraphStyle 標題1樣式 * @param titleStr 標題 * @throws DocumentException */ public void insertTitlePattern(String titleStr, RtfParagraphStyle rtfParagraphStyle) throws DocumentException{ Paragraph title = new Paragraph(titleStr); title.setFont(rtfParagraphStyle); this.document.add(title); } /** * 設置帶有目錄格式的標題(標題2格式) * @param titleStr 標題 * @param rtfParagraphStyle 標題2樣式 * @throws DocumentException */ public void insertTitlePatternSecond(String titleStr,RtfParagraphStyle rtfParagraphStyle) throws DocumentException{ Paragraph title = new Paragraph(titleStr); // 設置標題格式對齊方式 title.setFont(rtfParagraphStyle); this.document.add(title); } /** * @param tableName 標題 * @param fontsize 字體大小 * @param fontStyle 字體樣式 * @param elementAlign 對齊方式 * @throws com.lowagie.text.DocumentException */ public void insertTableName(String tableName,int fontsize,int fontStyle,int elementAlign) throws DocumentException{ Font titleFont = new Font(this.bfChinese, fontsize, fontStyle); titleFont.setColor(102, 102, 153); Paragraph title = new Paragraph(tableName); // 設置標題格式對齊方式 title.setAlignment(elementAlign); title.setFont(titleFont); this.document.add(title); } /** * @param contextStr 內容 * @param fontsize 字體大小 * @param fontStyle 字體樣式 * @param elementAlign 對齊方式 * @throws com.lowagie.text.DocumentException */ public void insertContext(String contextStr,int fontsize,int fontStyle,int elementAlign) throws DocumentException{ // 正文字體風格 Font contextFont = new Font(bfChinese, fontsize, fontStyle); Paragraph context = new Paragraph(contextStr); //設置行距 context.setLeading(3f); // 正文格式左對齊 // context.setAlignment(elementAlign); context.setFont(contextFont); // 離上一段落(標題)空的行數 context.setSpacingBefore(1); // 設置第一行空的列數 context.setFirstLineIndent(20); document.add(context); } /** * @param imgUrl 圖片路徑 * @param imageAlign 顯示位置 * @param height 顯示高度 * @param weight 顯示寬度 * @param percent 顯示比例 * @param heightPercent 顯示高度比例 * @param weightPercent 顯示寬度比例 * @param rotation 顯示圖片旋轉角度 * @throws java.net.MalformedURLException * @throws java.io.IOException * @throws com.lowagie.text.DocumentException */ public void insertImg(String imgUrl,int imageAlign,int height,int weight,int percent,int heightPercent,int weightPercent,int rotation) throws MalformedURLException, IOException, DocumentException{
// 添加圖片
Image img = Image.getInstance(imgUrl);
if(img==null)
return;
img.setAbsolutePosition(0, 0);
img.setAlignment(imageAlign);
img.scaleAbsolute(height, weight); img.scaleAbsolute(1000, 1000); img.scalePercent(percent); img.scalePercent(heightPercent, weightPercent);
img.setRotation(rotation);
document.add(img); }code
/** * 添加簡單表格 * @param column 表格列數(必須) * @param row 表格行數 * @throws DocumentException */ public void insertSimpleTable(int column,int row) throws DocumentException { Table table=new Table(column);//列數必須設置,而行數則能夠按照我的要求來決定是否須要設置 table.setAlignment(Element.ALIGN_CENTER);// 居中顯示 table.setAlignment(Element.ALIGN_MIDDLE);// 縱向居中顯示 table.setAutoFillEmptyCells(true);// 自動填滿 table.setBorderColor(new Color(0, 125, 255));// 邊框顏色 table.setBorderWidth(1);// 邊框寬度 table.setSpacing(2);// 襯距, table.setPadding(2);// 即單元格之間的間距 table.setBorder(20);// 邊框 for (int i = 0; i < column*3; i++) { table.addCell(new Cell(""+i)); } document.add(table); } /** * 在操做完成後必須關閉document,不然即便生成了word文檔,打開也會發生錯誤 * @throws DocumentException */ public void closeDocument() throws DocumentException{ this.document.close(); }
}orm