Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Printing directly to network printer?

Hii in my application I want to send my data directly to my network printer from my Android phone to print it. How can I do that?

I also want to provide specifications like layout, copies, page range, etc. How can I detect my printers directly from my Android phone and also give print command?

like image 902
Harinder Avatar asked Nov 14 '22 22:11

Harinder


1 Answers

You just need to submit your doccument to the google cloud print. Here is the code that I have used to print. The doccument is saved in external storage and is in pdf form. The only requirement is that both device and wireless printer must be in same network. If the printer is wired, the android device and the system connected to the printer must be logged in with same google account.

PrintManager printManager = (PrintManager) Order_Bag.this.getSystemService(Context.PRINT_SERVICE);
String jobName = Order_Bag.this.getString(R.string.app_name) + " Document";
//printManager.print(jobName, pda, null);
pda = new PrintDocumentAdapter(){

    @Override
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
        InputStream input = null;
        OutputStream output = null;

        try {

            input = new FileInputStream(Environment.getExternalStorageDirectory() + "/hello.pdf");
            output = new FileOutputStream(destination.getFileDescriptor());

            byte[] buf = new byte[1024];
            int bytesRead;

            while ((bytesRead = input.read(buf)) > 0) {
                output.write(buf, 0, bytesRead);
            }

            callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});

        } catch (FileNotFoundException ee){
            //Catch exception
        } catch (Exception e) {
            //Catch exception
        } finally {
            try {
                input.close();
                output.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){

        if (cancellationSignal.isCanceled()) {
            callback.onLayoutCancelled();
            return;
        }

        //    int pages = computePageCount(newAttributes);

        PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("The invoice").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();

        callback.onLayoutFinished(pdi, true);
    }
};

printManager.print(jobName, pda, null);
like image 106
Julie Avatar answered Dec 16 '22 12:12

Julie