Java动态生成条形码并将条形码插入进excel中

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

 
package k.barcode;
  
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
  
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
  
public class InsExcel {
  
    private POIFSFileSystem fs;
    private HSSFWorkbook wb;
    private HSSFSheet sheet;
    private HSSFRow row;
    private FileInputStream input;
    private String[] excleTitle;
  
    public static void main(String[] args) {
        //生成条码
        String bcVal = InsExcel.makeBarcodeValue();
        //生成条码图片
        String bcPath = InsExcel.makeBarcode(bcVal);
        //插入excel
        InsExcel.insBarcodeInExcel(bcPath);
    }
      
    //生成条码值
    public static String makeBarcodeValue(){
        return "A"+System.currentTimeMillis();
    }
      
    //生成条码文件至临时目录,并返回生成图片的路径信息
    public static String makeBarcode(final String barcodeValue){
        //存放条码图片的路径
        final String barcodePicPath = "d:\\\\barcode\\\\";
        try {
            //Create the barcode bean
            Code39Bean bean = new Code39Bean();
              
            final int dpi = 150;
              
            //Configure the barcode generator
            bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); //makes the narrow bar 
                                                             //width exactly one pixel
            bean.setWideFactor(3);
            bean.doQuietZone(false);
              
            //Open output file
            File outputFile = new File(barcodePicPath+barcodeValue+".png");
            OutputStream out = new FileOutputStream(outputFile);
            try {
                //Set up the canvas provider for monochrome JPEG output 
                BitmapCanvasProvider canvas = new BitmapCanvasProvider(
                        out, "image/png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
              
                //Generate the barcode
                bean.generateBarcode(canvas, barcodeValue);
              
                //Signal end of generation
                canvas.finish();
            } finally {
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
          
        return barcodePicPath+barcodeValue+".png";
    }
      
    public static void insBarcodeInExcel(String barcodePic){
        FileInputStream input = null;
        try {
            input = new FileInputStream(new File("d:\\\\base.xls"));// excelPath,Excel
            // 文件 的绝对路径
            POIFSFileSystem fs = new POIFSFileSystem(input);
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet sheet = wb.getSheetAt(1);
            HSSFRow row = sheet.getRow(0);// 得到标题的内容对象。
            System.out.println(row.getCell(15).toString());
  
            InputStream inputStream = new FileInputStream(barcodePic);
            byte[] bytes = IOUtils.toByteArray(inputStream);
            int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
            inputStream.close();
            CreationHelper helper = wb.getCreationHelper();
            Drawing drawing = sheet.createDrawingPatriarch();
            ClientAnchor anchor = helper.createClientAnchor();
            anchor.setCol1(15);
            anchor.setRow1(0);
            Picture pict = drawing.createPicture(anchor, pictureIdx);
            pict.resize();
            FileOutputStream fileOut = new FileOutputStream("d:\\\\base.xls");
            wb.write(fileOut);
            fileOut.close();
  
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (input != null) {
                    input.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  
}