「Android」将网页转换为PDF的初步实现
16lz
2022-01-17
「Android」将网页转换为PDF的初步实现
获取目标网页URL
// 需要转换为网页URL private static final String URL = "https://www.baidu.com";
获取WebView对象
// 获取WebView对象 mWebView = findViewById(R.id.demo_webView);
初始化WebView对象
// 初始化WebView对象 private void initWebView() { WebSettings settings = mWebView.getSettings(); settings.setAllowContentAccess(true); settings.setBuiltInZoomControls(false); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); settings.setJavaScriptEnabled(true); // 开启Application Cache功能 settings.setAppCacheEnabled(true); // 设置适配 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setDomStorageEnabled(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Log.d(TAG, "onPageStarted"); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Log.d(TAG, "onPageFinished"); // 网页加载完成后 // 将浏览器网页转换为PDF captureBrowser(mWebView, WebViewActivity.this); } }); mWebView.loadUrl(URL); }
将浏览器网页转换为PDF
/** * 将浏览器网页转换为PDF * * @param webView webView * @param context context */ public static void captureBrowser(WebView webView, Context context) { Log.d(TAG, "captureBrowser: "); try { // 创建存储文件 File pdfFile = new File(context.getExternalFilesDir(null).getAbsolutePath() + "/PDF.pdf"); if (pdfFile.exists()) { pdfFile.delete(); } pdfFile.createNewFile(); sDescriptor = ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_WRITE); // 设置参数 PrintAttributes.MediaSize isoA4 = PrintAttributes.MediaSize.ISO_A4; PrintAttributes attributes = new PrintAttributes.Builder().setMediaSize(isoA4) .setResolution(new PrintAttributes.Resolution("id", Context.PRINT_SERVICE, 500, 500)) .setColorMode(PrintAttributes.COLOR_MODE_COLOR) .setMinMargins(PrintAttributes.Margins.NO_MARGINS) .build(); // 计算需要的页数 int numberOfPages = (webView.getContentHeight() * 500 / (isoA4.getHeightMils())); sRanges = new PageRange[] {new PageRange(0, numberOfPages)}; // 获取webView适配器 sPrintAdapter = webView.createPrintDocumentAdapter("PDF"); // 开始打印 sPrintAdapter.onStart(); sPrintAdapter.onLayout(attributes, attributes, new CancellationSignal(), new PrintDocumentAdapter.LayoutResultCallback() { @Override public void onLayoutFinished(PrintDocumentInfo info, boolean changed) { sPrintAdapter.onWrite(sRanges, sDescriptor, new CancellationSignal(), new PrintDocumentAdapter.WriteResultCallback() { @Override public void onWriteFinished(PageRange[] pages) { Log.d(TAG, "onWriteFinished: PdfWrite is Finished"); super.onWriteFinished(pages); } }); super.onLayoutFinished(info, changed); } }, null); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
更多相关文章
- Android中Activity全局共享方法AppContext
- (1)集成
- Android中Activity全局共享方法AppContext
- Android(安卓)自带日期(DatePicker)和时间(TimePicker)选择器使
- Android(安卓)Bundle类
- Android(安卓)Bundle类
- Android之权限管理
- Android(安卓)定位不依赖三方sdk
- 类和 Json对象