生成Word文档的类库有很多,如果格式固定可以使用freemaker ,但如果是需要手工生成的则常用的有jacob,poi,itext等等,jacob操作office的能力是不错的,但是对于我个人来说,我不喜欢它的两方面:一、jacob只能应用于windows平台。二、除了要把相应的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();
②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));
③打开文档。
document.open();
④向文档中添加内容。
document.add(new Paragraph("Hello World"));
⑤关闭文档。(在最后必须关闭文档,否则即使生成了word文档也会打不开)
document.close();
下面提供一个通用文件给大家:
- public class WordUtils {
- private Document document;
- private BaseFont bfChinese;
-
- 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);
-
- }
-
-
-
-
-
- public void openDocument(String filePath) throws DocumentException,
- IOException {
-
- RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));
- this.document.open();
-
- this.bfChinese = BaseFont.createFont("STSongStd-Light",
- "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
- }
-
-
-
-
-
-
-
-
- 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);
- }
-
-
-
-
-
-
-
-
-
-
- public void insertTitlePattern(String titleStr, RtfParagraphStyle rtfParagraphStyle) throws DocumentException{
- Paragraph title = new Paragraph(titleStr);
- title.setFont(rtfParagraphStyle);
- this.document.add(title);
- }
-
-
-
-
-
-
-
-
- public void insertTitlePatternSecond(String titleStr,RtfParagraphStyle rtfParagraphStyle) throws DocumentException{
- Paragraph title = new Paragraph(titleStr);
-
- title.setFont(rtfParagraphStyle);
- this.document.add(title);
- }
-
-
-
-
-
-
-
-
-
- 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);
- }
-
-
-
-
-
-
-
-
- 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.setFont(contextFont);
-
- context.setSpacingBefore(1);
-
- context.setFirstLineIndent(20);
- document.add(context);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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);
- }
-
-
-
-
-
-
-
- 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);
- }
-
-
-
-
- public void closeDocument() throws DocumentException{
- this.document.close();
- }
-
- }
当然,上面还有一些表格的方法没有写出来,因为每个人的需求都是不同的,本人写了一个小例子,显示效果为:


下面提供IText的jar包: IText jar包(免积分)
这是上面显示IText操作效果的demo源代码: Demo(免积分)