In this blog we will learn on how to print content from your application by connecting with your wifi printer.
Android community provides some APIs that helps us in printing content from our application.They have classified the printing into three categories :
- Printing a Photo
- Printing HTML Content
- Printing Custom Document
You can find more details regarding these categories over here : https://developer.android.com/training/printing/index.html
Here, we will discuss about how to print the html content as i needed to print only that.
You can try the other two yourself.
APPROACH :
- Create a new WebView dynamically.
- Create an instance of PrintManager.
- Create an instance of PrintDocumentAdapter
- Create the data in the HTML format.
- Now execute the print command of the Print manager.
Implementing this is not at all difficault if you follow the steps in the same manner.
Now lets have a look at the code to have a clear idea of how to print the html content.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
WebView webView = new WebView(mContext); webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageFinished(WebView view, String url) { createWebPrintJob(view); mWebView = null; } }); String myHtml = getHtmlContent(); webView.loadDataWithBaseURL(null, myHtml, "text/HTML", "UTF-8", null); |
This is the main piece of code . Now lets have a look at the function createWebPrintJob(view)
1 2 3 4 5 6 7 8 9 |
private void createWebPrintJob(WebView webView) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { PrintManager printManager = (PrintManager) mContext.getSystemService(Context.PRINT_SERVICE); PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter("MyDocument"); printManager.print(" My Print Job", printAdapter, new PrintAttributes.Builder().build()); } else { // SHOW MESSAGE or UPDATE UI } } |
And finally lets have a look at the function getHtmlContent() :
1 2 3 4 5 6 7 |
public String getHtmlContent(){ return "<html>" +"<head>" +"<title> My Test Document </title></head>" +"<body><p>Test content 1</p> " +"<p>Test content 2</p> +"</body></html>"; } |
You can change the content of the getHtmlContent as per your need.
And it is done.
But keep in mind that your Printer and mobile should be on the same wifi network.