POI导出图片到excel的bug或者说填充颜色

来源:互联网  时间:2016/5/21 0:00:13

关于网友提出的“POI导出图片到excel的bug或者说填充颜色”问题疑问,本网通过在网上对“POI导出图片到excel的bug或者说填充颜色”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:POI导出图片到excel的bug或者说填充颜色
描述:

刚刚接触poi的导出

导出之前的默认图片,图片的背景色是透明的

出来后会变成这样子,怎么解决。。

出现问题:如果被导出的图片为背景色透明的话导出来之后图片颜色会失真,求解决办法。

导出方法如下

package com.idcsol.bml.web.controller;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.idcsol.bml.domain.Product;

public class ViewController {
     /** log 对象 */
    protected final Log log = LogFactory.getLog(this.getClass());
    /**
     * 记录写成excel表
     * @param cunForm
     * @param wb
     * @param dPicPath
     * @param mPicpath
     * @param nPicpath
     * @return
     */
    @SuppressWarnings("finally")
    public  HSSFWorkbook createExcel(Product product,HSSFWorkbook wb, String picPath, String dPicPath,HttpServletRequest request, String mPicpath, String nPicpath) throws Exception{
        HSSFCellStyle style1 = wb.createCellStyle();
        style1.setBorderTop((short)1);
        style1.setBorderLeft((short)1);
        style1.setBorderRight((short)1);
        style1.setBorderBottom((short)1);

        HSSFSheet sheet = wb.getSheet("产品信息");
        BufferedImage bufferImg = null;
        BufferedImage bufferImg1 = null;
        try {
            //插入文字信息
            HSSFRow row=sheet.getRow(12);
             row.getCell(2).setCellValue(product.getSupplier().getSupplierNm());
             HSSFRow row1=sheet.getRow(13);
             row1.getCell(2).setCellValue(product.getPerson().getPersonPM());
             HSSFRow row2=sheet.getRow(14);
             row2.getCell(2).setCellValue(product.getPerson().getTelNo());
             row2.getCell(4).setCellValue(product.getPerson().getMobileNo());
             HSSFRow row3=sheet.getRow(15);
             row3.getCell(2).setCellValue(product.getPerson().getFaxNo());
             HSSFRow row4=sheet.getRow(18);
             row4.getCell(2).setCellValue(product.getTitle());
             HSSFRow row5=sheet.getRow(19);
             row5.getCell(2).setCellValue(product.getBrandnm());
             HSSFRow row6=sheet.getRow(20);
             row6.getCell(2).setCellValue(product.getModelno());
             HSSFRow row7=sheet.getRow(21);
             row7.getCell(2).setCellValue(product.getDimensions());
             HSSFRow row8=sheet.getRow(22);
             row8.getCell(2).setCellValue(product.getNote());
             HSSFRow row9=sheet.getRow(33);
             //数量
             if(product.getQuantity()!= null ){
                 row9.getCell(2).setCellValue(String.valueOf(product.getQuantity()));
             }
             //单价
             if(product.getRate()!= null ){
                 row9.getCell(6).setCellValue(String.valueOf(product.getRate()));
             }
             HSSFRow row10=sheet.getRow(34);
             row10.getCell(2).setCellValue(product.getItem());
             row10.getCell(6).setCellValue(product.getItemno());

             //图片写入excel
             HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
             ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
            ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();  
            if (!"".equals(dPicPath) && dPicPath != null) {
                bufferImg = ImageIO.read(new File(dPicPath));
            }else {
                String path = request.getSession().getServletContext().getRealPath("/files/comm/logo1.jpg");//文件路径
                bufferImg = ImageIO.read(new File(path));
            }
            if (!"".equals(mPicpath) && mPicpath != null) {
                bufferImg1 = ImageIO.read(new File(picPath));
                ImageIO.write(bufferImg1,"jpg",byteArrayOut1);
                HSSFClientAnchor anchor1 = new HSSFClientAnchor(0,0,200,200,(short) 0,24,(short)1,30); //控制产品图片输出位置  
                anchor1.setAnchorType(2);
                patriarch.createPicture(anchor1 , wb.addPicture(byteArrayOut1.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
            }
            ImageIO.write(bufferImg,"jpg",byteArrayOut);  
            HSSFClientAnchor anchor =  new HSSFClientAnchor(0,0,200,200,(short) 5,1,(short)6,3);//设计师的logo图片
            anchor.setAnchorType(2);
            patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
            //输出实际尺寸参数:HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(1);按比例输出50% .resize(0.5);
        }catch(Exception e){
            System.out.println(e.toString());
         } finally {
        return wb;
     }

    }
}

解决方案1:

...

非常不建议在服务器生成excel...还这样搞..搞死人的...

上一篇求个Lucene指导老师
下一篇Java实现的Web应用团购的功能,急急急!
明星图片
相关文章
《POI导出图片到excel的bug或者说填充颜色》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)