菜鸟之关于java web项目里导出excel,word 等简单总结

来源:互联网 发布:金益康人事软件 编辑:程序博客网 时间:2024/06/05 06:38
/*自己在Java web项目中根据后台返回的文本信息和图片url将文字和图片导出到excel 或者word中的实现方法总结。
  在web项目中经常遇到导出office文档的功能。
本文主要为自己用过的几种网上常见的几种方法。(省去若干抛异常和后台数据处理部分,主要为用到导出的主要方法)*/


//一:首先要先设定浏览器的相应设置
//例:
response.setContentType("text/x-msdownload;charset=utf-8");
//作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
String dispposition = "inline; filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" )+ ".xls";
response.setHeader("Content-Disposition", dispposition);//通信信息头MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。
out.clearBuffer(); 
out = pageContext.pushBody();//cleanBuffer()清除缓冲区防止repose留存其他数据
os = response.getOutputStream();//得到通向浏览器的输出流
} catch (IOException e1) {
e1.printStackTrace(); }
//二:执行相关方法从后台返回要显示的信息.
//三.导出部分
//1).WritableWorkbook类(填充文本方便但本人没有加过图片)


WritableWorkbook excl = null;//创建对象
try {
excl = Workbook.createWorkbook(os);//创建的文本是指向浏览器导出的
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
WritableSheet shet = excl.createSheet(fileName, 0);//创建excel的第一页
Label labl = new Label(i, j , str);
ws.addCell(labl);//sheet填充文本cell的方法
//文本填写完毕之后
excl.write();//WritableWorkbook输出操作
os.close();//关流
//2) HSSFWorkbook类(poi 功能强大,可以填充图片)
HSSFWorkbook excl = new HSSFWorkbook();   //创建一个新的excel 
HSSFSheet shet = wb.createSheet(fileName); //创建excelsheet
HSSFRow rowi=ws.createRow(i);//创建一行
HSSFCell celli=rowi.createCell(0);//创建一个单元格
celli.setCellValue(str);//填充文本

URL url = new URL(Str2);//这里str2为url网址
URLConnection con = url.openConnection();  // 打开连接  
con.setConnectTimeout(5*1000);   //设置请求超时为5s 
InputStream inimge = con.getInputStream(); //获取图片流
 /*//测试是否下载的到
       byte[] bs = new byte[1024];    
       int len;  
      File sf=new File("D:/new.png");  
      if(!sf.exists()){  
          sf.mkdirs();  
      }  
      OutputStream os2 = new FileOutputStream("D:/new.png");  
       while ((len = is.read(bs)) != -1) {  
         os2.write(bs, 0, len);  
       }  
       os2.close();  
       //is.close(); 
System.out.println("下载的到");   */     
BufferedImage bufferImg = null;   //图片缓存  
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
  bufferImg=ImageIO.read(inimge);
ImageIO.write(bufferImg, "jpg", byteArrayOut); //图片转换为字节数据输出流
HSSFPatriarch patriarch = ws.createDrawingPatriarch();  
//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)    
//anchor主要用于设置图片的属性  
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 3, i, (short) 7,i+4 );  //具体位置
anchor.setAnchorType(3);     
//插入图片    
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));   
excl.write(os);//输出到流
       os.flush();
os.close();
//3)XWPFDocument类(poi 简单的word读写,替换等)
XWPFDocument word = null;
word=new XWPFDocument();// 创建Word文件
FileOutputStream fileOut = null;     
        BufferedImage bufferImg = null;     
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
XWPFParagraph p= word.createParagraph();//创建段
XWPFRun  r = p.createRun();
r.setText(str);//写文本
word.write(os);
os.close();
//4)Document类(itext,个人感觉处理word简单好用)
//Rectangle pageSize = new Rectangle(595, 842);//宽高
      Document word = new Document();
      word.setMargins(70, 70, 80, 50);//设置页边距




        BufferedImage bufferImg = null;     
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        
        //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray    
        try {  
// 写入数据
String sj="";
String str="";
RtfWriter2.getInstance(word, os);
word.open();
if(sjyl.getMs().indexOf("<img src=\"")!=-1){//判读是否有图片网址
String str1=sjyl.getMs();
String[] Strs=str1.split("<");
String[] Strpng=str1.split("\"");
String urlstr=Strpng[1];//截取网址
URL url = new URL(urlstr);
URLConnection con = url.openConnection();  // 打开连接  
     //设置请求超时为5s  
      con.setConnectTimeout(5*1000);  
  InputStream is = con.getInputStream(); //获取图片流 
bufferImg=ImageIO.read(is);
ImageIO.write(bufferImg, "jpg", byteArrayOut);
  Image img = Image.getInstance(byteArrayOut.toByteArray());
  img.setAbsolutePosition(0, 0);
      img.setAlignment(Image.LEFT);// 设置图片显示位置
stri=Strs[0];//截取网址
Paragraph p = new Paragraph(str+stri);
word.add(p);
word.add(img);
}else{
stri=sjyl.getMs();
Paragraph p = new Paragraph(str+stri);
word.add(p);
}

}
        word.close();



0 0
原创粉丝点击