Java动态生成条形码并将条形码插入进excel中详解编程语言

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10655.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论