首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转]用iText导出条码图片(包含条形码)

2012-12-21 
[转]用iText导出条形码图片(包含条形码)private static final int HEIGHT_SPACE 20// 图片之间的间隔pu

[转]用iText导出条形码图片(包含条形码)
private static final int HEIGHT_SPACE = 20;// 图片之间的间隔  
 
public static void main(String[] args) throws Exception {  
    List<String> codeList = new ArrayList<String>();  
    codeList.add("ABCD124645765");  
    codeList.add("ABCD12-4645-765");  
    codeList.add("ABCD12464-5765");  
    codeList.add("AB-CD1-246457-65");  
    createBarcodeImage(200, 100, codeList);  
    System.out.println("The image is created.");  
}  
 
/** 
* Creates the barcode image. 
*  
* @param barCodeWidth 
*            生成条形码的宽度 
* @param barCodeHeight 
*            生成条形码的高度 
* @param codeList 
*            要生成条形码的字符集合 
*  
* @throws Exception 
*             the exception 
*/ 
public static void createBarcodeImage(int barCodeWidth, int barCodeHeight,  
        List<String> codeList) throws Exception {  
    // list不能为空  
    Assert.assertTrue("The list can not empty.", codeList.size() > 0);  
    // 图片宽度  
    int imageWidth = (barCodeWidth + barCodeWidth / 2) * codeList.size() + barCodeWidth / 2;  
    // 图片高度  
    int imageHeight = barCodeHeight + HEIGHT_SPACE * 2;  
    BufferedImage img = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);  
    Graphics2D g = (Graphics2D) img.getGraphics();  
    g.fillRect(0, 0, imageWidth, imageHeight);  
    Font font = new java.awt.Font("", java.awt.Font.PLAIN, 12);  
    Barcode128 barcode128 = new Barcode128();  
    FontRenderContext fontRenderContext = g.getFontRenderContext();  
    // 条形码(文字)的高度  
    int stringHeight = (int) font.getStringBounds("", fontRenderContext).getHeight();  
    // 图片横坐标开始位置  
    int startX = barCodeWidth / 2;  
    // 图片纵坐标开始位置  
    int imageStartY = (imageHeight - barCodeHeight - stringHeight) / 2;  
    int stringStartY = imageStartY * 2 + barCodeHeight;// 条形码(文字)开始位置  
    for (String code : codeList) {  
        int codeWidth = (int) font.getStringBounds(code, fontRenderContext).getWidth();  
        barcode128.setCode(code);  
        Image codeImg = barcode128.createAwtImage(Color.black, Color.white);  
        g.drawImage(codeImg, startX, imageStartY, barCodeWidth, barCodeHeight, Color.white, null);  
        // 为图片添加条形码(文字),位置为条形码图片的下部居中  
        AttributedString ats = new AttributedString(code);  
        ats.addAttribute(TextAttribute.FONT, font, 0, code.length());  
        AttributedCharacterIterator iter = ats.getIterator();  
        // 设置条形码(文字)的颜色为蓝色  
        g.setColor(Color.BLUE);  
        // 绘制条形码(文字)  
        g.drawString(iter, startX + (barCodeWidth - codeWidth) / 2, stringStartY);  
        // 更改图片横坐标开始位置,图片之间的空隙为条形码的宽度的一半  
        startX = startX + barCodeWidth / 2 + barCodeWidth;  
    }  
    g.dispose();  
    OutputStream os = new BufferedOutputStream(new FileOutputStream("/home/admin/codeList.png"));  
    ImageIO.write(img, "PNG", os);  

热点排行