Используйте этот код, чтобы открыть веб-представление, а затем я создал кнопку с плавающим действием, и, нажав ее, вы можете загрузить представление в формате PDF ... Убедитесь, что вы ввели правильные URL-адреса
НО ПЕРВЫЙ..СДЕЛАЙТЕ ДРУГОЙ КЛАСС NAMED PDFVIEW, И МЫ ИСПОЛЬЗУЕМ ЭТОТ КЛАССОВЫЙ МЕТОД В НАШЕМ КОДЕ ...
КЛАСС PDFVIEW КОД ...
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();
}
}
}
// СЕЙЧАСКОД ОСНОВНОГО КЛАССА ..
@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());
}
}
});
}