利用IText導出Word

生成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

相關文章
相關標籤/搜索