java导出word文档组件_java导出word文档(转)

本文介绍了两种在Java中导出Word文档的方法:使用Apache POI库输出纯文本,以及利用iText组件创建带有字体样式的文档。通过详细代码示例展示了如何设置字体样式、标题和正文内容,以及如何处理页面边距和对齐方式。
摘要由CSDN通过智能技术生成

导出word文档有两种方式:第一种是使用POI,第二种是使用itext组件,下面逐渐介绍:

1、使用POI的方式:本方式目前没法改变字体样式,只能输出纯文本。

/**

* 试卷导出word文档

* @param request

* @param response

*/

private void exportInstForWord(HttpServletRequest request,

HttpServletResponse response) {

try{

String questInstId = request.getParameter("inst_id");

String fileName = request.getParameter("inst_name");

if (questInstId !=null && !StrUtil.isEmpty(questInstId)) {

StringBuffer strBuff = new StringBuffer();

strBuff = "输出的文字:\n\r"; //其中 \n\r是换行符

response.addHeader("Content-Disposition", "attachment;filename="+fileName+".doc");

OutputStream os = response.getOutputStream();

ByteArrayInputStream bais = new ByteArrayInputStream(strBuff.toString().getBytes());

POIFSFileSystem fs = new POIFSFileSystem();

DirectoryEntry directory = fs.getRoot();

directory.createDocument("WordDocument", bais);

fs.writeFilesystem(os);

bais.close();

os.close();

}else{

}

}catch(Exception e){

e.printStackTrace();

}

}

第二种方式:使用itext导出带有字体样式的word文档。使用到的jar包,包括:iText-2.1.7.jar 、iText-rtf-2.1.7.jar、jxl.jar

/**

* 试卷导出word文档

* @param request

* @param response

*/

private void exportInstForWord(HttpServletRequest request,

HttpServletResponse response) {

try{

String questInstId = request.getParameter("inst_id");

String fileName = request.getParameter("inst_name");

if (questInstId !=null && !StrUtil.isEmpty(questInstId)) {

StringBuffer strBuff = new StringBuffer();

strBuff = "输出的文字:\r\n"

response.addHeader("Content-Disposition", "attachment;filename="+fileName+".doc");

OutputStream os = response.getOutputStream();

try {

//设置标题字体样式,粗体、二号、华文中宋

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);

Document doc = new Document();

RtfWriter2.getInstance(doc, os);

// 打开文档

doc.open();

//设置页边距,上、下25.4毫米,即为72f,左、右31.8毫米,即为90f

doc.setMargins(90f, 90f, 72f, 72f);

//向文档中添加内容

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();

}

os.close();

}else{

questInstId = "";

}

}catch(Exception e){

e.printStackTrace();

}

}

其中一个工具类:

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 {

/**

* 功能说明:设置字体的样式,颜色为黑色

* 修改日期: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);

}

/**

* 功能说明:设置字体的样式

* 修改日期: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;

}

/**

* 功能说明:为文字填充浅灰色背景

* 修改日期: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;

}

/**

* 功能说明:设置段落的样式,设置前半截内容和后半截内容格式不一样的段落样式

* 修改日: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;

}

/**

* 功能说明:设置段落的样式,设置前半截内容填充了浅灰色的背景颜色,后半截内容没有背景颜色的段落样式

* 修改日期: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;

}

/**

* 功能说明:设置段落的样式,一般用于设置标题

* 修改日期: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毫米

* 修改日期: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);

}

/**

* 功能说明:设置段落的样式

* 修改日期: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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值