Hi Dev, baru-baru ini saya diberikan tantangna oleh klien untuk menyelesaikan permasalahan bisnis mereka, sebenarnya ada banyak sekali permasalahan mereka, tapi hanya satu yang membuat saya merasa tertantang, yaitu mencetak tampilan yang ada di webview.
Sejauh ini, saya belum ada gambaran pasti tentang metode yang memungkinkan untuk dilakukan, tapi yang pasti itu sangat mungkin untuk dilakukan, begitulah kesimpulan yang saya ambil dari berbagai sumber referensi yang saya baca.
Saya tertarik dengan cara memanfaatkan class PrintManager dan PrintDocumentAdapter, namun cara menjalankannya yang tidak mudah karena kita tidak cukup hanya mengandalkan main thread / ui thread, sehingga saya perlu membuat job baru untuk menjalankan tugas ini secara background (asynchronous), sehingga tidak memblokir ui thread.
Berikut gambaran umum kodenya.
public void createWebPagePrint(WebView webView) {
/*if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return;*/
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
String jobName = getString(R.string.webapp_name) + " Document";
PrintAttributes.Builder builder = new PrintAttributes.Builder();
builder.setMediaSize(PrintAttributes.MediaSize.ISO_A5);
PrintJob printJob = printManager.print(jobName, printAdapter, builder.build());
if(printJob.isCompleted()){
Toast.makeText(getApplicationContext(), R.string.print_complete, Toast.LENGTH_LONG).show();
}
else if(printJob.isFailed()){
Toast.makeText(getApplicationContext(), R.string.print_failed, Toast.LENGTH_LONG).show();
}
// Save the job object for later status checking
}