• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Android将网页转换为PDF的初步实现

android 搞代码 3年前 (2022-03-01) 18次浏览 已收录 0个评论
文章目录[隐藏]

「Android」将网页转换为PDF的初步实现

获取指标网页URL

<code class="java">    // 须要转换为网页URL
    private static final String URL = "https://www.baidu.com";

获取WebView对象

<code class="java">    // 获取WebView对象
    mWebView = findViewById(R.id.demo_webView);

初始化WebView对象

<code class="java">    // 初始化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

<code class="java">    /**
     * 将浏览器网页转换为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();
        }
    }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Android将网页转换为PDF的初步实现
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址