「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();        }    }

更多相关文章

  1. Android中Activity全局共享方法AppContext
  2. (1)集成
  3. Android中Activity全局共享方法AppContext
  4. Android(安卓)自带日期(DatePicker)和时间(TimePicker)选择器使
  5. Android(安卓)Bundle类
  6. Android(安卓)Bundle类
  7. Android之权限管理
  8. Android(安卓)定位不依赖三方sdk
  9. 类和 Json对象

随机推荐

  1. android native内存泄漏检测原理
  2. 【黑马Android】(19)response下载文件/验
  3. 安卓Android面试题汇总
  4. [置顶] Android(安卓)Paint之 setXfermod
  5. Android踩坑记录-混淆踩坑之(java.lang.N
  6. Android(安卓)SDK离线安装方法详解(加速
  7. android 问题汇总系列之六
  8. 关于上传的app的标识号和版本号
  9. 关于listview
  10. Android(安卓)查看动态库依赖的库文件