2014-03-12 48 views
4

我正在尝试使用barcode4j lib创建条形码。这是我得到的:enter image description here它看起来很顺利。这是我的方式:使用barcode4j创建gif条形码

 BitmapCanvasProvider provider = null; 


     Interleaved2Of5Bean bean = new Interleaved2Of5Bean(); 
     int dpi = 100; 

     // Configure the barcode generator 
     bean.setModuleWidth(UnitConv.in2mm(1.0f/
              dpi)); // makes the narrow 
     // bar 
     // width exactly 
     // one 
     // pixel 

     bean.doQuietZone(false); 
     provider = 
       new BitmapCanvasProvider(100, BufferedImage.TYPE_BYTE_GRAY, 
             true, 0); 
     bean.generateBarcode(provider, request.getParameter("barcode")); 
     provider.finish(); 


     BufferedImage barcodeImage = provider.getBufferedImage(); 
     response.setContentType("image/gif"); 
     OutputStream outputStream = response.getOutputStream(); 
     ImageIO.write(barcodeImage, "gif", outputStream); 
     outputStream.close(); 

如何增加其定义?

+0

如果你的意思是分辨率,那么你应该修改'BitmapCanvasProvider'构造函数的第一个参数一个更高级的例子 – mangusta

回答

7

好的,我找到了一个解决方案。这是我如何做:

Interleaved2Of5Bean bean = new Interleaved2Of5Bean(); 

    bean.setHeight(10d); 

    bean.doQuietZone(false); 

    OutputStream out = 
     new java.io.FileOutputStream(new File("output.png")); 

    BitmapCanvasProvider provider = 
     new BitmapCanvasProvider(out, "image/x-png", 110, 
           BufferedImage.TYPE_BYTE_GRAY, false, 
           0); 
    bean.generateBarcode(provider, request.getParameter("barcode")); 

    provider.finish(); 

    BufferedImage barcodeImage = provider.getBufferedImage(); 
    response.setContentType("image/x-png"); 
    OutputStream outputStream = response.getOutputStream(); 
    ImageIO.write(barcodeImage, "png", outputStream); 
    outputStream.close(); 

enter image description here

0

我发现在jar文件的例子(examples目录)。如果有其他人在寻找它,我会在这里发布它。 此处还有一个支持条形码的list

/* 
* Copyright 2004 Jeremias Maerki. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 

import org.krysalis.barcode4j.impl.code39.Code39Bean; 
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; 
import org.krysalis.barcode4j.tools.UnitConv; 

/** 
* This example demonstrates creating a bitmap barcode using the bean API. 
* 
* @author Jeremias Maerki 
* @version $Id: SampleBitmapBarcodeWithBean.java,v 1.2 2006/11/07 16:45:28 jmaerki Exp $ 
*/ 
public class SampleBitmapBarcodeWithBean { 

    public static void main(String[] args) { 
     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("out.jpg"); 
      OutputStream out = new FileOutputStream(outputFile); 
      try { 
       //Set up the canvas provider for monochrome JPEG output 
       BitmapCanvasProvider canvas = new BitmapCanvasProvider(
         out, "image/jpeg", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0); 

       //Generate the barcode 
       bean.generateBarcode(canvas, "123456"); 

       //Signal end of generation 
       canvas.finish(); 
      } finally { 
       out.close(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

还存在添加自定义元素条形码

/* 
* Copyright 2010 Jeremias Maerki 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

/* $Id: SampleBarcodeEnhanced.java,v 1.1 2010/10/05 08:56:04 jmaerki Exp $ */ 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.font.FontRenderContext; 
import java.awt.geom.AffineTransform; 
import java.awt.geom.Rectangle2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 

import org.krysalis.barcode4j.impl.datamatrix.DataMatrixBean; 
import org.krysalis.barcode4j.impl.datamatrix.SymbolShapeHint; 
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; 
import org.krysalis.barcode4j.output.bitmap.BitmapEncoder; 
import org.krysalis.barcode4j.output.bitmap.BitmapEncoderRegistry; 
import org.krysalis.barcode4j.tools.UnitConv; 

/** 
* This class demonstrates how to create a barcode bitmap that is enhanced by custom elements. 
* 
* @version $Id: SampleBarcodeEnhanced.java,v 1.1 2010/10/05 08:56:04 jmaerki Exp $ 
*/ 
public class SampleBarcodeEnhanced { 

    private void generate(File outputFile) throws IOException { 
     String msg = "Sample Message"; 
     String[] paramArr = new String[] {"Information 1", "Information 2", "Barcode4J is cool!"}; 

     //Create the barcode bean 
     DataMatrixBean bean = new DataMatrixBean(); 

     final int dpi = 200; 

     //Configure the barcode generator 
     bean.setModuleWidth(UnitConv.in2mm(8.0f/dpi)); //makes a dot/module exactly eight pixels 
     bean.doQuietZone(false); 
     bean.setShape(SymbolShapeHint.FORCE_RECTANGLE); 

     boolean antiAlias = false; 
     int orientation = 0; 
     //Set up the canvas provider to create a monochrome bitmap 
     BitmapCanvasProvider canvas = new BitmapCanvasProvider(
       dpi, BufferedImage.TYPE_BYTE_BINARY, antiAlias, orientation); 

     //Generate the barcode 
     bean.generateBarcode(canvas, msg); 

     //Signal end of generation 
     canvas.finish(); 

     //Get generated bitmap 
     BufferedImage symbol = canvas.getBufferedImage(); 

     int fontSize = 32; //pixels 
     int lineHeight = (int)(fontSize * 1.2); 
     Font font = new Font("Arial", Font.PLAIN, fontSize); 
     int width = symbol.getWidth(); 
     int height = symbol.getHeight(); 
     FontRenderContext frc = new FontRenderContext(new AffineTransform(), antiAlias, true); 
     for (int i = 0; i < paramArr.length; i++) { 
      String line = paramArr[i]; 
      Rectangle2D bounds = font.getStringBounds(line, frc); 
      width = (int)Math.ceil(Math.max(width, bounds.getWidth())); 
      height += lineHeight; 
     } 

     //Add padding 
     int padding = 2; 
     width += 2 * padding; 
     height += 3 * padding; 

     BufferedImage bitmap = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY); 
     Graphics2D g2d = (Graphics2D)bitmap.getGraphics(); 
     g2d.setBackground(Color.white); 
     g2d.setColor(Color.black); 
     g2d.clearRect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
     g2d.setFont(font); 

     //Place the barcode symbol 
     AffineTransform symbolPlacement = new AffineTransform(); 
     symbolPlacement.translate(padding, padding); 
     g2d.drawRenderedImage(symbol, symbolPlacement); 

     //Add text lines (or anything else you might want to add) 
     int y = padding + symbol.getHeight() + padding; 
     for (int i = 0; i < paramArr.length; i++) { 
      String line = paramArr[i]; 
      y += lineHeight; 
      g2d.drawString(line, padding, y); 
     } 
     g2d.dispose(); 

     //Encode bitmap as file 
     String mime = "image/png"; 
     OutputStream out = new FileOutputStream(outputFile); 
     try { 
      final BitmapEncoder encoder = BitmapEncoderRegistry.getInstance(mime); 
      encoder.encode(bitmap, out, mime, dpi); 
     } finally { 
      out.close(); 
     } 
    } 

    /** 
    * Command-line program. 
    * @param args the command-line arguments 
    */ 
    public static void main(String[] args) { 
     try { 
      SampleBarcodeEnhanced app = new SampleBarcodeEnhanced(); 
      File outputFile = new File("out.png"); 
      app.generate(outputFile); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 

}