31公里(rye's blog)

05 14

java生成word文件的解决方案

JAVA生成WORD文件的方法目前有以下种:

一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案

一种是pio但是他的excel处理很程序 word模块还局限于读取word的文本内容,写word文件就更弱项了

本文介绍的是itext生成rtf文件并保存格式为word 此方案本人已实践过 并已在项目中使用

itext生成pdf技术相当成熟 在word上操作的功能itext基本上都可以满足,直接上代码: 
 
  1. package com.rye.test;  
  2. import java.awt.Color;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.  
  7. import com.lowagie.text.Cell;  
  8. import com.lowagie.text.Document;  
  9. import com.lowagie.text.DocumentException;  
  10. import com.lowagie.text.Font;  
  11. import com.lowagie.text.PageSize;  
  12. import com.lowagie.text.Paragraph;  
  13. import com.lowagie.text.Table;  
  14. import com.lowagie.text.rtf.RtfWriter2;  
  15. /**  
  16.  * 创建word文档 步骤:   
  17.  * 1,建立文档   
  18.  * 2,创建一个书写器   
  19.  * 3,打开文档   
  20.  * 4,向文档中写入数据   
  21.  * 5,关闭文档  
  22.  */ 
  23. public class WordDemo {  
  24.  
  25.  public WordDemo() {  
  26.  }  
  27.  
  28.  /**  
  29.   * @param args  
  30.   */ 
  31.  public static void main(String[] args) {  
  32. // 创建word文档,并设置纸张的大小
  33.   Document document = new Document(PageSize.A4); 
  34.   try {  
  35.    RtfWriter2.getInstance(document,
  36. new FileOutputStream("E:/word.doc"));  
  37.  
  38.    document.open();  
  39.      
  40.    //设置合同头  
  41.      
  42.    Paragraph ph = new Paragraph();  
  43.    Font f  = new Font();  
  44.      
  45.    Paragraph p = new Paragraph("出口合同"
  46. new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(000)) );  
  47.    p.setAlignment(1);  
  48.    document.add(p);  
  49.    ph.setFont(f);  
  50.  
  51.    // 设置中文字体  
  52.    // BaseFont bfFont =  
  53.    // BaseFont.createFont("STSongStd-Light",
  54. "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);  
  55.    // Font chinaFont = new Font();  
  56.    /*  
  57.     * 创建有三列的表格  
  58.     */ 
  59.    Table table = new Table(4);  
  60.    document.add(new Paragraph("生成表格"));  
  61.    table.setBorderWidth(1);  
  62.    table.setBorderColor(Color.BLACK);  
  63.    table.setPadding(0);  
  64.    table.setSpacing(0);  
  65.      
  66.    /*  
  67.     * 添加表头的元素  
  68.     */ 
  69.    Cell cell = new Cell("表头");//单元格  
  70.    cell.setHeader(true);  
  71.    cell.setColspan(3);//设置表格为三列  
  72.    cell.setRowspan(3);//设置表格为三行  
  73.    table.addCell(cell);  
  74.    table.endHeaders();// 表头结束  
  75.  
  76.    // 表格的主体  
  77.    cell = new Cell("Example cell 2");  
  78.    cell.setRowspan(2);//当前单元格占两行,纵向跨度  
  79.    table.addCell(cell);  
  80.    table.addCell("1,1");  
  81.    table.addCell("1,2");  
  82.    table.addCell("1,3");  
  83.    table.addCell("1,4");  
  84.    table.addCell("1,5");  
  85.    table.addCell(new Paragraph("用java生成的表格1"));  
  86.    table.addCell(new Paragraph("用java生成的表格2"));  
  87.    table.addCell(new Paragraph("用java生成的表格3"));  
  88.    table.addCell(new Paragraph("用java生成的表格4"));  
  89.    document.add(new Paragraph("用java生成word文件"));  
  90.    document.add(table);  
  91.    document.close();  
  92.   } catch (FileNotFoundException e) {  
  93.    e.printStackTrace();  
  94.   } catch (DocumentException e) {  
  95.    e.printStackTrace();  
  96.   } catch (IOException e) {  
  97.    e.printStackTrace();  
  98.   }  
  99.  }  
  100.  

相关jar包:

iText_API帮助手册.rar

iText-2.1.5.jar

iText-rtf-2.1.4.jar

iTextAsian.jar

  1. avatar
    rye
    August 30th, 2010 at 17:00 pm
    [回复]
    暂时没发现有什么办法可以读WORD 然后进行替换 因为微软未公布word文件编码规则
  2. avatar
    Nacdice
    August 26th, 2010 at 9:18 am
    [回复]
    那么我想在word文档中替换标签内容,合并多个wrod文档,怎么实现?
    还有我想把表格定位到一个地方,又该如何实现?
  3. avatar
    Iven
    August 15th, 2010 at 16:50 pm
    [回复]
    很好用!