返回顶部

收藏

itext导出word文档常用方法汇总

更多

在实际项目中经常需要导出Word文档,Itext是其中一种选择,使用Itext导出Word文档时需要导入iText-2.1.7.jar和iText-rtf-2.1.7.jar两个jar,具体实现如下代码所示:

package cn.outofmemory.utils.file;  

import java.awt.Color;  

import com.lowagie.text.Chunk;  
import com.lowagie.text.Font;  
import com.lowagie.text.Paragraph;  
import com.lowagie.text.Phrase;  

public class DocStyleUtils {  

    /** 
     * 功能说明:设置字体的样式,颜色为黑色</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param family  字体类型 
     * @param size    字体大小,22f为二号,18f为小二号,16f为三号 
     * @param style   字体样式 
     * @return 
     */  
    public static Font setFontStyle(String family , float size , int style){  
        return setFontStyle(family, Color.BLACK, size, style);  
    }  

    /** 
     * 功能说明:设置字体的样式</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param family  字体类型 
     * @param color   字体颜色 
     * @param size    字体大小,22f为二号,18f为小二号,16f为三号 
     * @param style   字体样式 
     * @return 
     */  
    public static Font setFontStyle(String family , Color color , float size , int style){  
        Font font = new Font();  
        font.setFamily(family);  
        font.setColor(color);  
        font.setSize(size);  
        font.setStyle(style);  
        return font;  
    }  

    /** 
     * 功能说明:为文字填充浅灰色背景</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param content   需要填充背景颜色的内容 
     * @param appendStr 不需要填充背景颜色的内容 
     * @return 
     */  
    private static Phrase setPhraseStyle(String content , String appendStr){  
        Chunk chunk = new Chunk(content);  
        //填充的背景颜色为浅灰色  
        chunk.setBackground(Color.LIGHT_GRAY);  
        Phrase phrase = new Phrase(chunk);  
        phrase.add(appendStr);  
        return phrase;  
    }  

    /** 
     * 功能说明:设置段落的样式,设置前半截内容和后半截内容格式不一样的段落样式</BR> 
     * 修改日:2011-04-27 
     * @author myclover 
     * @param content  前半截内容 
     * @param font     字体的样式 
     * @param firstLineIndent 首行缩进多少字符,16f约等于一个字符 
     * @param appendStr 后半截内容 
     * @return 
     */  
    public static Paragraph setParagraphStyle(String content , Font font , float firstLineIndent , String appendStr){  
        Paragraph par = setParagraphStyle(content, font, 0f, 12f);  
        Phrase phrase = new Phrase();  
        phrase.add(par);  
        phrase.add(appendStr);  
        Paragraph paragraph = new Paragraph(phrase);  
        paragraph.setFirstLineIndent(firstLineIndent);  
        //设置对齐方式为两端对齐  
        paragraph.setAlignment(Paragraph.ALIGN_JUSTIFIED_ALL);  
        return paragraph;  
    }  

    /** 
     * 功能说明:设置段落的样式,设置前半截内容填充了浅灰色的背景颜色,后半截内容没有背景颜色的段落样式</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param content  前半截有背景颜色的内容 
     * @param font     字体的样式 
     * @param firstLineIndent 首行缩进的字符,16f约等于一个字符 
     * @param leading  行间距12f表示单倍行距 
     * @param appendStr 后半截内容 
     * @return 
     */  
    public static Paragraph setParagraphStyle(String content , Font font , float firstLineIndent , float leading , String appendStr){  
        Phrase phrase = setPhraseStyle(content , appendStr);  
        Paragraph par = new Paragraph(phrase);  
        par.setFont(font);  
        par.setFirstLineIndent(firstLineIndent);  
        par.setLeading(leading);  
        //设置对齐方式为两端对齐  
        par.setAlignment(Paragraph.ALIGN_JUSTIFIED_ALL);  
        return par;  
    }  

    /** 
     * 功能说明:设置段落的样式,一般用于设置标题</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param content  段落的内容 
     * @param font     字体样式 
     * @param leading  行间距 
     * @param alignment 对齐方式 
     * @return 
     */  
    public static Paragraph setParagraphStyle(String content , Font font , float leading , int alignment){  
        return setParagraphStyle(content, font, 0f, leading, 0f, alignment);  
    }  

    /** 
     * 功能说明:设置段落的样式,对齐方式为两端对齐,缩进样式是文本之后0.2毫米</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param content  段落的内容 
     * @param font     字体的样式 
     * @param firstLineIndent 首行缩进多少字符,16f约等于一个字符 
     * @param leading  行间距 
     * @return 
     */  
    public static Paragraph setParagraphStyle(String content , Font font , float firstLineIndent , float leading){  
        return setParagraphStyle(content, font, firstLineIndent, leading, 0.6f, Paragraph.ALIGN_JUSTIFIED_ALL);  
    }  

    /** 
     * 功能说明:设置段落的样式</BR> 
     * 修改日期:2011-04-27 
     * @author myclover 
     * @param content  段落的内容 
     * @param font     字体的样式 
     * @param firstLineIndent  首行缩进多少字符,16f约等于一个字符 
     * @param leading  行间距 
     * @param indentationRight 缩进样式中的文本之后多少毫米,0.6f相当于0.2毫米 
     * @param alignment 对齐方式 
     * @return 
     */  
    public static Paragraph setParagraphStyle(String content , Font font , float firstLineIndent , float leading , float indentationRight , int alignment){  
        Paragraph par = new Paragraph(content, font);  
        par.setFirstLineIndent(firstLineIndent);  
        par.setLeading(leading);  
        par.setIndentationRight(indentationRight);  
        par.setAlignment(alignment);  
        return par;  
    }  

}  

测试类如下:

package cn.outofmemory.utils.file;  

import java.io.File;  
import java.io.FileOutputStream;  

import jxl.Workbook;  
import jxl.format.Alignment;  
import jxl.write.Label;  
import jxl.write.WritableSheet;  
import jxl.write.WritableWorkbook;  

import com.lowagie.text.Document;  
import com.lowagie.text.Font;  
import com.lowagie.text.Paragraph;  
import com.lowagie.text.rtf.RtfWriter2;  

public class TestDoc {  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        exportDoc("D:\\test.doc");  

    }  

    public static void exportDoc(String fileName){  
        try {  
            Document doc = new Document();  
            RtfWriter2.getInstance(doc, new FileOutputStream(fileName));  
            // 打开文档  
            doc.open();  
            //设置页边距,上、下25.4毫米,即为72f,左、右31.8毫米,即为90f  
            doc.setMargins(90f, 90f, 72f, 72f);  

            //设置标题字体样式,粗体、二号、华文中宋  
            Font tfont = DocStyleUtils.setFontStyle("华文中宋", 22f, Font.BOLD);  
            //设置正文内容的字体样式,常规、三号、仿宋_GB2312  
            Font bfont = DocStyleUtils.setFontStyle("仿宋_GB2312", 16f, Font.NORMAL);  

            //构建标题,居中对齐,12f表示单倍行距  
            Paragraph title = DocStyleUtils.setParagraphStyle("测试Itext导出Word文档", tfont, 12f, Paragraph.ALIGN_CENTER);  
            //构建正文内容  
            StringBuffer contentSb = new StringBuffer();  
            contentSb.append("最近项目很忙,这个是项目中使用到的,所以现在总结一下,以便今后可以参考使用,");  
            contentSb.append("2011年4月27日 — 2011年5月20日,对以下技术进行使用,");  
            contentSb.append("Itext、");  
            contentSb.append("Excel、");  
            contentSb.append("Word、");  
            contentSb.append("PPT。");  

            //首行缩进2字符,行间距1.5倍行距  
            Paragraph bodyPar = DocStyleUtils.setParagraphStyle(contentSb.toString(), bfont, 32f, 18f);  
            Paragraph bodyEndPar = DocStyleUtils.setParagraphStyle("截至2011年4月28日,各种技术已经完全实现。", bfont, 32f, 18f);  
            //设置空行  
            Paragraph blankRow = new Paragraph(18f, " ", bfont);  
            Paragraph deptPar = DocStyleUtils.setParagraphStyle("(技术开发部盖章)", bfont, 12f, Paragraph.ALIGN_RIGHT);  
            Paragraph datePar = DocStyleUtils.setParagraphStyle("2011-04-30", bfont, 12f, Paragraph.ALIGN_RIGHT);  

            //向文档中添加内容  
            doc.add(title);  
            doc.add(blankRow);  
            doc.add(bodyPar);  
            doc.add(bodyEndPar);  
            doc.add(blankRow);  
            doc.add(blankRow);  
            doc.add(blankRow);  
            doc.add(deptPar);  
            doc.add(datePar);  

            //最后一定要记住关闭  
            doc.close();  

        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }     

}  

标签:java,itext,word

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. Ahoo 发表 2014-09-25 03:03:06 导出Word图片不显示的问题
  2. 博主 发表 2015-04-15 16:09:02 Java分布式中文分词组件word分词v1.2发布
  3. 博主 发表 2015-08-29 01:51:28 word v1.3 发布,Java 分布式中文分词组件
  4. 刘莉莉 发表 2016-03-13 17:57:59 理解 Javascript This 关键字
  5. 博主 发表 2013-12-05 07:32:10 Java使用freemarker导出word和excel
  6. 博主 发表 2014-08-17 09:18:05 How to Analyze Java Thread Dumps
  7. xiayf 发表 2018-05-13 16:00:00 配置 Maven 自动化构建 protobuf 代码依赖
  8. SingleX 发表 2015-01-10 13:55:12 读《JUnit in Action 中文版》
  9. 小丁 发表 2018-05-18 13:50:05 阿里受邀加入Java国际组织 中国标准全球化在望
  10. lixiangmaojack 发表 2015-02-26 01:57:18 深入剖析ThreadLocal
  11. darida 发表 2018-05-21 10:55:17 购物车模块
  12. 博主 发表 2015-04-05 04:22:16 Java编程思想笔记五

评论

  • 我用你的方法,设置仿宋字体不起作用是什么问题?

    回复   |   〆 Forever、卟弃 发表于 2014-08-28 12:38:04
  • 我用你的方法,设置仿宋字体不起作用是什么问题?

    〆 Forever、卟弃

    我也在看这个问题,目前无解,你有解决的方法了吗?

    回复   |   甄码农 发表于 2014-09-10 22:10:25
  • 分享应用仿宋_GB2312 字体成功经验 1.删除本机字体。 2.重新下一个(或者可以拷贝本地字体试试),然后将文件名改成 FangSong_GB2312,再安装之,就能成功应用。代码如下 // BaseFont bfHei = BaseFont.createFont("c:\windows\fonts\FangSong_GB2312.ttf", BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); // Font font1 = new Font(bfHei,20f,Font.NORMAL,Color.BLACK);

    回复   |   迷茫小年轻 发表于 2015-11-25 17:02:17

发表评论