mardi 4 août 2015

how to print byte array data to zebra printer using java?

I want to print a pdf file to zebra printer using java application.I have generated a pdf using jasper report with 2D bar codes and this pdf file I want to print to zebra printer using java application. If I am giving manual print to zebra printer its printing that pdf file but once I am trying with java application to print same pdf file. Job is submitting to printer but print is not coming.

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;


public class ZebraPrintUtil {

    public static void main(String[] args) throws IOException, InterruptedException {

         byte[] content =convertFileToBytes("D://old files/test123.pdf");
         print(content,"ZDesigner GX420t");

    }

     private static byte[] convertFileToBytes(String absoluteFilePath) throws IOException {

            File file = new File(absoluteFilePath);
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            try {
                for (int readNum; (readNum = fis.read(buf)) != -1;) {
                    bos.write(buf, 0, readNum); // no doubt here is 0
                }
            } catch (IOException ex) {

            } finally {
                if (fis != null) {
                    fis.close();
                }
            }
            byte[] bytes = bos.toByteArray();
            return bytes;
        }

     private static boolean  print(byte[] byteArray, String reqPrinterId)
                throws IOException, InterruptedException {
            boolean isPrintedSuccessfully = false;
            DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
            PrintService[] services = PrintServiceLookup.lookupPrintServices(
                    flavor, null);

            if (services.length > 0) {
                PrintService myService = null;
                for (PrintService service : services) {
                    if (service.getName().contains(reqPrinterId)) {
                        myService = service;
                        break;
                    }
                }

                DocPrintJob printJob = myService.createPrintJob();
                JobCompleteMonitor monitor = new JobCompleteMonitor();
                printJob.addPrintJobListener(monitor);
                Doc document = new SimpleDoc(byteArray, flavor, null);
                try {
                           printJob.print(document, null);
                           monitor.waitForJobCompletion();
                           System.out.println("-------------------- Print Completed "+monitor.completed);

                           isPrintedSuccessfully = true;
                 }  catch (Exception e) {
                           e.printStackTrace();
                    }

            }
            return isPrintedSuccessfully; 
        }

     private static class JobCompleteMonitor extends PrintJobAdapter {

            private boolean completed = false;

            @Override
            public void printJobCanceled(PrintJobEvent pje) {
                signalCompletion();
            }

            @Override
            public void printJobCompleted(PrintJobEvent pje) {
                signalCompletion();
            }

            @Override
            public void printJobFailed(PrintJobEvent pje) {
                signalCompletion();
            }

            @Override
            public void printJobNoMoreEvents(PrintJobEvent pje) {
                signalCompletion();
            }

            private void signalCompletion() {

                synchronized (JobCompleteMonitor.this) {
                    completed = true;
                    JobCompleteMonitor.this.notify();
                }
            }

            public synchronized void waitForJobCompletion() {

                try {
                     while (!completed) {
                     wait();
                     }
                } catch (InterruptedException e) {

                  }
            }

        }

Aucun commentaire:

Enregistrer un commentaire