Use this code to open web view and then i have made a Floating Action Button and on the click of it, you can download the pdf view...Make Sure you enter correct URL's
BUT FIRST..MAKE ANOTHER CLASS NAMED PDFVIEW AND WE WILL USE THIS CLASS METHOD'S IN OUR CODE...
CLASS PDFVIEW CODE...
public class PdfView {
private static final int REQUEST_CODE=101;
/**
* convert webview content into to pdf file
* @param activity pass the current activity context
* @param webView webview
* @param directory directory path where pdf file will be saved
* @param fileName name of the pdf file.
* */
public static void createWebPrintJob(Activity activity, WebView webView, File directory, String fileName, final Callback callback) {
//check the marshmallow permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
callback.failure();
return;
}
}
String jobName = activity.getString(R.string.app_name) + " Document";
PrintAttributes attributes = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A3)
.setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
}
PdfPrint pdfPrint = new PdfPrint(attributes);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
pdfPrint.print(webView.createPrintDocumentAdapter(jobName), directory, fileName, new PdfPrint.CallbackPrint() {
@Override
public void success(String path) {
callback.success(path);
}
@Override
public void onFailure() {
callback.failure();
}
});
}else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
pdfPrint.print(webView.createPrintDocumentAdapter(), directory, fileName, new PdfPrint.CallbackPrint() {
@Override
public void success(String path) {
callback.success(path);
}
@Override
public void onFailure() {
callback.failure();
}
});
}
}
}
/**
* create alert dialog to open the pdf file
* @param activity pass the current activity context
* @param title to show the heading of the alert dialog
* @param message to show on the message area.
* @param path file path create on storage directory
*/
public static void openPdfFile(final Activity activity, String title, String message, final String path){
//check the marshmallow permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
return;
}
}
AlertDialog.Builder builder=new AlertDialog.Builder(activity);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton("Open", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
fileChooser(activity,path);
}
});
builder.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
/** callback interface to get the result back after created pdf file*/
public interface Callback{
void success(String path);
void failure();
}
/**
* @param activity pass the current activity context
* @param path storage full path
*/
private static void fileChooser(Activity activity, String path) {
File file = new File(path);
Intent target = new Intent("android.intent.action.VIEW");
//Uri uri = FileProvider.getUriForFile(activity, "${applicationId}.com.package.name.fileprovider", file);
Uri uri = FileProvider.getUriForFile(activity, activity.getApplicationContext().getPackageName()+ ".fileprovider", file);
target.setDataAndType(uri, "application/pdf");
target.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent intent = Intent.createChooser(target, "Open File");
try {
activity.startActivity(intent);
} catch (ActivityNotFoundException var6) {
var6.printStackTrace();
}
}
}
//NOW MAIN CLASS CODE..
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_orders);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
WebView wb = (WebView) findViewById(R.id.webview);
wb.getSettings().setBuiltInZoomControls(true);
Pbar = (ProgressBar) findViewById(R.id.pB1);
WebSettings ws = wb.getSettings();
ws.setJavaScriptEnabled(true);
ws.setDomStorageEnabled(true);
ws.setAllowFileAccess(true);
wb.getSettings().setBuiltInZoomControls(true);
// wb.getSettings().setDisplayZoomControls(false);
wb.clearCache(true);
wb.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if (progress < 100 && Pbar.getVisibility() == ProgressBar.GONE) {
Pbar.setVisibility(ProgressBar.VISIBLE);
}
Pbar.setProgress(progress);
if (progress == 100) {
Pbar.setVisibility(ProgressBar.GONE);
pdfdownload.setVisibility(View.VISIBLE);
}
}
});
pdfdownload = (FloatingActionButton) findViewById(R.id.pdf);
pdfdownload = (FloatingActionButton) findViewById(R.id.pdf);
pdfdownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM + "/ANY_DIRECTORY/");
final ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setMessage("Please wait");
progressDialog.show();
//PDFView Class Method
PdfView.createWebPrintJob(context, wb, path, fileName, new PdfView.Callback() {
@Override
public void success(String path) {
progressDialog.dismiss();
PdfView.openPdfFile(context.this, getString(R.string.app_name), "Do you want to open the pdf file?" + fileName, path);
}
@Override
public void failure() {
progressDialog.dismiss();
}
});
}
});
wb.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// do your handling codes here, which url is the requested url
// probably you need to open that url rather than redirect:
Log.e("redirectUrl", "" + url);
//CHECK YOUR URL CONDITIONS TO OPEN RIGHT URL FOR PDF, IF ANY..OTHERWISE LOAD DIRECTLY
if (url.contains("/guest/home")) {
view.loadUrl(postUrl);
} else {
view.loadUrl(url);
}
return false; // then it is not handled by default action
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.e("url finished", url);
}
});
wb.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.e("DOWNLOAD", url + " , " + userAgent + " , " + contentDisposition + " , " + mimetype + " , " + contentLength);
try {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(newURL[1].trim()));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, file_name);
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e("download", "download fail" + e.toString());
}
}
});
}