Java使用iText生成word文件的完美解决方案(亲测可行)

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

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

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


当我使用这个JAVA生成RTF文件时费了好大的劲,原本是想生成WORD文档的,但是WORD文档POI只支持往生成的WORD中填入文本,对于图片根本就不支持。后来想想,RTF格式的也可用WORD打开,不如生成RTF。结果上网搜了很多技术,Itext,jacob,java2word,rtftemplate,reportrunner看了近一天也没什么头绪,写这些示例的几乎没有,还好Itext的例子有那么几个,可是我上官网下了最新核心包后发现,导入例子中居然全部红叉,原本以为上错网站了,再经过核实还是对的,于是断定网上的例子肯定有误,itext或许不能用。绕了大半天其他的技术我真的没法弄了,还是回到了iText,静下心来思考觉得包肯定有问题,仔细一看原来最新版的是支持PDF版的iText-5.0.1.jar是不对的,本来以为最新的功能最全了,没想到错了,想到这里赶紧下了稍微iText-2.1.7.jar结果终于成功了,感慨不已!现贡献代码如下记住官网上只能下到核心包:iText-1.2.7.jar和支持rtf的iText-rtf-2.1.7.jar这两个貌似对了,其实还有一个包是比较重要的iTextAsian.jar这个包对于设置字体什么的起了关键作用上网可以搜到的.


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

用到的jar包: 
iText-2.1.7.jar
iText-rtf-2.1.7.jar
iTextAsian.jar


package com.rye.test;  
import java.awt.Color;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
 
import com.lowagie.text.Cell;  
import com.lowagie.text.Document;  
import com.lowagie.text.DocumentException;  
import com.lowagie.text.Font;  
import com.lowagie.text.PageSize;  
import com.lowagie.text.Paragraph;  
import com.lowagie.text.Table;  
import com.lowagie.text.rtf.RtfWriter2;  
/**  
  * 创建word文档 步骤:   
  * 1,建立文档   
  * 2,创建一个书写器   
  * 3,打开文档   
  * 4,向文档中写入数据   
  * 5,关闭文档  
  */ 
 public class WordDemo {  
  
  public WordDemo() {  
  }  
  
  /**  
   * @param args  
   */ 
  public static void main(String[] args) {  
 // 创建word文档,并设置纸张的大小
   Document document = new Document(PageSize.A4); 
   try {  
    RtfWriter2.getInstance(document,
 new FileOutputStream("E:/word.doc"));  
 
    document.open();  
     
   //设置合同头  
     
   Paragraph ph = new Paragraph();  
   Font f  = new Font();  
     
   Paragraph p = new Paragraph("出口合同", 
 new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(0, 0, 0)) );  
    p.setAlignment(1);  
    document.add(p);  
    ph.setFont(f);  
  
    // 设置中文字体  
    // BaseFont bfFont =  
    // BaseFont.createFont("STSongStd-Light",
 "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);  
    // Font chinaFont = new Font();  
    /*  
     * 创建有三列的表格  
     */ 
    Table table = new Table(4);  
    document.add(new Paragraph("生成表格"));  
    table.setBorderWidth(1);  
    table.setBorderColor(Color.BLACK);  
    table.setPadding(0);  
    table.setSpacing(0);  
      
    /*  
     * 添加表头的元素  
     */ 
    Cell cell = new Cell("表头");//单元格  
    cell.setHeader(true);  
    cell.setColspan(3);//设置表格为三列  
    cell.setRowspan(3);//设置表格为三行  
    table.addCell(cell);  
    table.endHeaders();// 表头结束  
 
    // 表格的主体  
    cell = new Cell("Example cell 2");  
    cell.setRowspan(2);//当前单元格占两行,纵向跨度  
    table.addCell(cell);  
    table.addCell("1,1");  
    table.addCell("1,2");  
    table.addCell("1,3");  
    table.addCell("1,4");  
    table.addCell("1,5");  
    table.addCell(new Paragraph("用java生成的表格1"));  
    table.addCell(new Paragraph("用java生成的表格2"));  
    table.addCell(new Paragraph("用java生成的表格3"));  
    table.addCell(new Paragraph("用java生成的表格4"));  
    document.add(new Paragraph("用java生成word文件"));  
    document.add(table);  
    document.close();  
   } catch (FileNotFoundException e) {  
    e.printStackTrace();  
   } catch (DocumentException e) {  
    e.printStackTrace();  
   } catch (IOException e) {  
    e.printStackTrace();  
   }  
  }  
  
 } 


代码2:

import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.rtf.RtfWriter2;
public class CreateWordDemo {
	public void createDocContext(String file,String contextString)throws DocumentException, IOException{
		//设置纸张大小
		Document document = new Document(PageSize.A4);
		//建立一个书写器,与document对象关联
		RtfWriter2.getInstance(document, new FileOutputStream(file));
		document.open();
		//设置中文字体
		BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
		//标题字体风格
		Font titleFont = new Font(bfChinese,12,Font.BOLD);
		//正文字体风格
		Font contextFont = new Font(bfChinese,10,Font.NORMAL);
		Paragraph title = new Paragraph("标题");
		//设置标题格式对齐方式
		title.setAlignment(Element.ALIGN_CENTER);
		title.setFont(titleFont);
		document.add(title);
		Paragraph context = new Paragraph(contextString);
		context.setAlignment(Element.ALIGN_LEFT);
		context.setFont(contextFont);
		//段间距
		context.setSpacingBefore(3);
		//设置第一行空的列数
		context.setFirstLineIndent(20);
		document.add(context);
		//设置Table表格,创建一个三列的表格
		Table table = new Table(3);
		int width[] = {25,25,50};//设置每列宽度比例
		table.setWidths(width);
		table.setWidth(90);//占页面宽度比例
		table.setAlignment(Element.ALIGN_CENTER);//居中
		table.setAlignment(Element.ALIGN_MIDDLE);//垂直居中
		table.setAutoFillEmptyCells(true);//自动填满
		table.setBorderWidth(1);//边框宽度
		//设置表头
		Cell haderCell = new Cell("表格表头");
		haderCell.setHeader(true);
		haderCell.setColspan(3);
		table.addCell(haderCell);
		table.endHeaders();
		
		Font fontChinese = new Font(bfChinese,12,Font.NORMAL,Color.GREEN);
		Cell cell = new Cell(new Paragraph("这是一个3*3测试表格数据",fontChinese));
		cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
		table.addCell(cell);
		table.addCell(new Cell("#1"));
		table.addCell(new Cell("#2"));
		table.addCell(new Cell("#3"));
		
		document.add(table);
		document.close();
			
	}
	public static void main(String[] args) {
		CreateWordDemo word = new CreateWordDemo();
		String file = "test.doc";
		try {
			word.createDocContext(file, "测试iText导出Word文档");
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


图片版:

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

RTFCreate rtfMain = new RTFCreate();

rtfMain.createRTFContext(FILE_NAME);




} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}




public void createRTFContext(String path) throws DocumentException,

IOException {

Document document = new Document(PageSize.A4);

RtfWriter2.getInstance(document, new FileOutputStream(path));

document.open();

// 设置中文字体

BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",

"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

// 标题字体风格

Font titleFont = new Font(bfChinese, 12, Font.BOLD);




// 正文字体风格

Font contextFont = new Font(bfChinese, 10, Font.NORMAL);




Paragraph title = new Paragraph("标题");

// 设置标题格式对齐方式

title.setAlignment(Element.ALIGN_CENTER);

title.setFont(titleFont);

document.add(title);




String contextString = "iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。";

Paragraph context = new Paragraph(contextString);

// 正文格式左对齐

context.setAlignment(Element.ALIGN_LEFT);

context.setFont(contextFont);

// 离上一段落(标题)空的行数

context.setSpacingBefore(20);

// 设置第一行空的列数

context.setFirstLineIndent(20);




document.add(context);




// //在表格末尾添加图片

Image png = Image.getInstance("c:/fruit.png");

document.add(png);

document.close();

}




}




你可能感兴趣的:(JAVA)