【问题标题】:Creating gif barcode using barcode4j使用barcode4j创建gif条码
【发布时间】:2014-04-16 03:57:03
【问题描述】:

我正在尝试使用 barcode4j lib 创建条形码。这就是我所拥有的: 它看起来很流畅。我就是这样做的:

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

如何增加它的定义?

【问题讨论】:

  • 如果你的意思是分辨率,那么你应该修改BitmapCanvasProvider构造函数的第一个参数

标签: java servlets barcode gif


【解决方案1】:

好的,我找到了解决方案。我就是这样做的:

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

【讨论】:

    【解决方案2】:

    我在jar 文件(在示例目录中)中找到了一个示例。如果其他人正在寻找它,我会将其发布在这里。 这里还有一个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);
            }
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      使用此链接下载 jar 文件: //http://www.onbarcode.com/tutorial/java-barcode-generation.html#1

               /*            
                // Select a barcode type to create a Java barcode object 
                Code128 barcode = new Code128(); 
      
                // Set barcode data text to encode
                barcode.setData("Barcode-in-Java"); 
      
                // Set barcode data text to encode
                barcode.setX(2); 
      
                // Generate barcode & encode into GIF format
                barcode.drawBarcode("C://barcode-code128.gif"); 
      
                // Generate barcode & encode into JPEG format
                barcode.drawBarcode("C://barcode-code128.jpg"); 
      
                // Generate barcode & encode into EPS format
                barcode.drawBarcode2EPS("C://barcode-code128.eps"); 
      
                // Generate barcode & print into Graphics2D object
                barcode.drawBarcode("Java Graphics2D object"); 
      
                */
               String path=System.getProperty("user.home")   "/Desktop";
               String val = "val here"
               Code39 barcode = new Code39();
               barcode.setData(val);
               barcode.setX(2);
               barcode.drawBarcode(path "/" NIC ".png");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 2014-03-29
        • 2012-11-16
        • 2014-06-05
        • 2016-01-06
        • 1970-01-01
        • 2013-09-13
        相关资源
        最近更新 更多