1

i am trying to print barcode using servlet but the print is not in proper size. i want to print label with specific with and height. if i am print this barcode using 3rd party application it's printing correct but if i use my code print become twice in size use more then one label.

package com.service;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.krysalis.barcode4j.impl.int2of5.Interleaved2Of5Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;

/**
 *
 * @author akash
 */
public class Barcode extends HttpServlet {
    private String filePath = "/home/chimeralabs/public_html/uploads/";
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

            String id = request.getParameter("patientId");

           Interleaved2Of5Bean bean = new Interleaved2Of5Bean();

    bean.setHeight(10d);

    bean.doQuietZone(false);

    OutputStream out = new java.io.FileOutputStream(new File("Barcode_"+id+".png"));

    BitmapCanvasProvider provider =
        new BitmapCanvasProvider(out, "image/x-png", 510,
                                 BufferedImage.TYPE_BYTE_GRAY, false,
                                 0);
    bean.generateBarcode(provider, id);

    provider.finish();

    BufferedImage barcodeImage = provider.getBufferedImage();
    response.setContentType("image/x-png");
    OutputStream outputStream = response.getOutputStream();
    ImageIO.write(barcodeImage, "png", outputStream);
    outputStream.close();
    request.setAttribute("patientId", id);
    RequestDispatcher rd = request.getRequestDispatcher("Print");
    rd.forward(request, response);
    }

}

enter image description here

import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Print extends HttpServlet {
    private String filePath = "/home/chimeralabs/public_html/uploads/";

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    pras.add(new Copies(1));

    String id = (String)request.getAttribute("patientId");

    PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);

    PrintService ps = pss[0];
    System.out.println("Printing to " + ps);

    DocPrintJob job = ps.createPrintJob();

    FileInputStream fin = new FileInputStream("Barcode_1082.png");
    Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);

       try {
           job.print(doc, pras);
       } catch (PrintException ex) {
           Logger.getLogger(Print.class.getName()).log(Level.SEVERE, null, ex);
       }

    fin.close();
  }
}
Akash Arora
  • 71
  • 1
  • 14

3 Answers3

0

The iText library supports pretty much every kind of barcode imaginable. You can use the same.

Akash
  • 587
  • 5
  • 12
0

(Since I can't comment yet, I guess I have to leave this as an answer?)

I'm not too familiar with Java printing, but it looks like the file you're trying to print is a PNG, but the DocFlavor is set to GIF. There seems to be a PNG DocFlavor. Have you tried that?

Also, you might want to check out this question which seems similar.

Ian Walker
  • 61
  • 3
0

Include this jar BixolonPrinter.jar file and BarCodeBuilder.getBarCodeData(data, symbology, height, width, alignment, textPosition) which retuns byte[] to be given to printer. which supports all formats of barcodes and sizes.

// ------------------- Barcode Symbology ------------------- //
public static int BARCODE_TYPE_UPCA = 101;
public static int BARCODE_TYPE_UPCE = 102;
public static int BARCODE_TYPE_EAN8 = 103;
public static int BARCODE_TYPE_EAN13 = 104;
public static int BARCODE_TYPE_ITF = 106;
public static int BARCODE_TYPE_Codabar = 107;
public static int BARCODE_TYPE_Code39 = 108;
public static int BARCODE_TYPE_Code93 = 109;
public static int BARCODE_TYPE_Code128 = 110;
public static int BARCODE_TYPE_PDF417 = 201;
public static int BARCODE_TYPE_MAXICODE = 202;
public static int BARCODE_TYPE_DATAMATRIX = 203;
public static int BARCODE_TYPE_QRCODE = 204;

// ------------------- Barcode Text Position------------------- //
public static int BARCODE_HRI_NONE = -11;
public static int BARCODE_HRI_ABOVE = -12;
public static int BARCODE_HRI_BELOW = -13;
Madhava Rao
  • 69
  • 1
  • 4