如何用POI3.0生成WORD文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用POI3.0生成WORD文档相关的知识,希望对你有一定的参考价值。
参考技术A 我最近也在学:仅有的一点资料import java.io.*;
import java.util.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.util.LittleEndian;
public class WordTest
public WordTest()
public static boolean writeWordFile(String path, String content)
boolean w = false;
try
// byte b[] = content.getBytes( "ISO-8859-1 ");
byte b[] = content.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument( "WordDocument ", bais);
FileOutputStream ostream = new FileOutputStream(path);
fs.writeFilesystem(ostream);
bais.close();
ostream.close();
catch (IOException e)
e.printStackTrace();
return w;
public static void main(String[] args)
boolean b = writeWordFile( "E://test.doc ", "hello ");
/*
public String extractText(InputStream in) throws IOException
ArrayList text = new ArrayList();
POIFSFileSystem fsys = new POIFSFileSystem(in);
DocumentEntry headerProps = (DocumentEntry) fsys.getRoot().getEntry( "WordDocument ");
DocumentInputStream din = fsys.createDocumentInputStream( "WordDocument ");
byte[] header = new byte[headerProps.getSize()];
din.read(header);
din.close();
// Prende le informazioni dall 'header del documento
int info = LittleEndian.getShort(header, 0xa);
boolean useTable1 = (info & 0x200) != 0;
//boolean useTable1 = true;
// Prende informazioni dalla piece table
int complexOffset = LittleEndian.getInt(header, 0x1a2);
//int complexOffset = LittleEndian.getInt(header);
String tableName = null;
if (useTable1)
tableName = "1Table ";
else
tableName = "0Table ";
DocumentEntry table = (DocumentEntry) fsys.getRoot().getEntry(tableName);
byte[] tableStream = new byte[table.getSize()];
din = fsys.createDocumentInputStream(tableName);
din.read(tableStream);
din.close();
din = null;
fsys = null;
table = null;
headerProps = null;
int multiple = findText(tableStream, complexOffset, text);本回答被提问者和网友采纳
POI 生成 word 文档 简单版(包括文字表格图片字体样式设置等)
POI 生成word 文档 一般有两种方法:
① word模板 生成word 文档 ;
② 写代码直接生成 word 文档;
我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接代码;
/**
* 镇街日报导出word
*/
@RequestMapping(params = "exportWordForTownDaily")
public void exportWordForTownDaily(HttpServletResponse response ,String selectDate){
if(StringUtils.isNullOrEmpty(selectDate)){
return;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
sdf.parse(selectDate);
}catch (Exception e){
e.printStackTrace();
return;
}
CaseEntity entity = new CaseEntity();
entity.setRepotingTime_begin(selectDate + " 00:00:00");
entity.setRepotingTime_end(selectDate + " 23:59:59");
//获取镇街实际扣分
List<CaseEntity> caseEntityList = statisticsService.getTownActualScore(entity);
//获取各镇街情况
List<Map<String, Object>> townDaily = statisticsService.townDaily(entity);
//格式化查询日期(年月日)
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
try {
selectDate = sdf2.format(sdf.parse(selectDate));
} catch (ParseException e) {
e.printStackTrace();
}
//------------------------------------生成word文档------------------------------------------------
//创建document对象
XWPFDocumentUtil document = new XWPFDocumentUtil();
//创建标题段落
XWPFParagraph titleParag = document.createParagraph();
XWPFRun titleRun = titleParag.createRun();
titleRun.setText("镇街日报");
titleRun.setFontSize(20);
titleRun.setBold(true);//字体是否加粗
titleParag.setAlignment(ParagraphAlignment.LEFT);//段落居左
//换行
//XWPFParagraph brParagraph1 = document.createParagraph();
//XWPFRun brRun = brParagraph1.createRun();
//brRun.setText("
");
//创建一个段落
XWPFParagraph p = document.createParagraph();
int rows = caseEntityList.size()+1;
int cols = 3;
//创建一个表格
XWPFTable table= document.createTable(rows, cols);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(5000));
//设置表格宽度为非自动
width.setType(STTblWidth.DXA);
//表头行
XWPFTableRow headRow = table.getRow(0);
XWPFTableCell headCell0 = headRow.getCell(0);
XWPFTableCell headCell1 = headRow.getCell(1);
XWPFTableCell headCell2 = headRow.getCell(2);
p = headCell0.addParagraph();
XWPFRun headRun0 = p.createRun();
headRun0.setText("序号");
headRun0.setFontSize(12);
headRun0.setBold(true);//是否粗体
headCell0.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
p = headCell1.addParagraph();
XWPFRun headRun1 = p.createRun();
headRun1.setText("镇街");
headRun1.setFontSize(12);
headRun1.setBold(true);
headCell1.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
p = headCell2.addParagraph();
XWPFRun headRun2 = p.createRun();
headRun2.setFontSize(12);
headRun2.setText("总扣分");
headRun2.setBold(true);
headCell2.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
//表主体行
for(int i=0 ;i<caseEntityList.size();i++){
CaseEntity caseEntity = caseEntityList.get(i);
XWPFTableRow contentRow = table.getRow(i+1);
XWPFTableCell cell0 = contentRow.getCell(0);
XWPFTableCell cell1 = contentRow.getCell(1);
XWPFTableCell cell2 = contentRow.getCell(2);
p = cell0.addParagraph();
XWPFRun pRun0=p.createRun();
pRun0.setText(i+1+"");
//垂直居中
cell0.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
p = cell1.addParagraph();
XWPFRun pRun1=p.createRun();
pRun1.setText(caseEntity.getTownName());
//垂直居中
cell1.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
p = cell2.addParagraph();
XWPFRun pRun2=p.createRun();
pRun2.setText(caseEntity.getTownActualScore().toString());
//垂直居中
cell2.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
}
//-----------------------------各镇街情况------------------------------
//创建标题段落
XWPFParagraph title1 = document.createParagraph();
XWPFRun title1Run = title1.createRun();
title1Run.setText("
各镇街比较严重的问题");
title1Run.setFontSize(20);
title1Run.setBold(true);
try {
for(Map<String,Object> townMap:townDaily){
CaseEntity townCase = (CaseEntity)townMap.get("townCase");
XWPFParagraph xwpfParagraph = document.createParagraph();
XWPFRun xwpfRun_town = xwpfParagraph.createRun();
XWPFRun xwpfRun = xwpfParagraph.createRun();
xwpfRun_town.setText(townCase.getTownName());
xwpfRun_town.setFontSize(14);
xwpfRun_town.setBold(true);
xwpfRun_town.setColor("00cc44");
xwpfRun.setText(","+selectDate+"当天扣分较多的问题有:");
xwpfRun.setFontSize(14);
xwpfRun.setBold(true);
List<Map<String,Object>> caseInfoList = (List<Map<String,Object>>)townMap.get("caseInfoList");
Integer no = 0;
for(Map<String,Object> map:caseInfoList){
CaseEntity caseInfo = (CaseEntity)map.get("caseInfo");
XWPFParagraph xwpfParagraph1 = document.createParagraph();
XWPFRun xwpfRun1 =xwpfParagraph1.createRun();
XWPFRun xwpfRun2 = xwpfParagraph1.createRun();
XWPFRun xwpfRun3 = xwpfParagraph1.createRun();
xwpfRun1.setText((++no)+"、");
xwpfRun2.setText(caseInfo.getProblemStreet());
xwpfRun3.setText(","+caseInfo.getProblemNotes());
xwpfRun1.setFontSize(14);
xwpfRun2.setFontSize(14);
xwpfRun2.setColor("4747d1");
xwpfRun3.setFontSize(14);
List<AttachmentEntity> fileList = (List<AttachmentEntity>)map.get("fileList");
for(AttachmentEntity at:fileList){
String mainPath = at.getMainPath();
String path = at.getPath();
if(!StringUtils.isNullOrEmpty(mainPath) && !StringUtils.isNullOrEmpty(path)){
//第一张图片
document.addPictureData(new FileInputStream(mainPath+path), XWPFDocumentUtil.PICTURE_TYPE_JPEG);
document.createPicture(document.getAllPictures().size() - 1, 300, 400, document.createParagraph());
}
}
}
}
OutputStream output = response.getOutputStream();
//生成word文件的文件名
String fileName= new String(("镇街日报.docx").getBytes("UTF-8"),"iso-8859-1");
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
//把word文档写到输出流
document.write(output);
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//--------------------------------word文档结束-----------------------------------------------------
}
效果如下图所示:
以上是关于如何用POI3.0生成WORD文档的主要内容,如果未能解决你的问题,请参考以下文章