Java動態生成條形碼并將條形碼插入進excel中

efbb 9年前發布 | 8K 次閱讀 Java 條形碼

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

}

</pre>

 本文由用戶 efbb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!