在Android上从Webview创建PDF

Lea*_*ira 5 pdf android webview

所以我试图从Webview创建一个PDF.现在我可以从webview创建一个图像,但是我在一些页面中分割文档时遇到了一些问题.

首先,我从webview创建一个Bitmap:

public static Bitmap screenShot(View view) {
        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
                view.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        view.draw(canvas);
        return bitmap;
    }
Run Code Online (Sandbox Code Playgroud)

其次,我创建并显示PDF:

public void criaPdf(){
        Bitmap bitmap = Utils.screenShot(mContratoWebview);

        Document doc = new Document();


        File dir = new File(getFilesDir(), "app_imageDir");

        if(!dir.exists()) {
            dir.mkdirs();
        }

        File file = new File(dir, "contratoPdf.pdf");

        try {
            FileOutputStream fOut = new FileOutputStream(file);

            PdfWriter.getInstance(doc, fOut);

            //open the document
            doc.open();

            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

            byte[] byteArray = stream.toByteArray();
            Image image = Image.getInstance(byteArray);
            image.scaleToFit(PageSize.A4.getHeight(), PageSize.A4.getWidth());

            doc.newPage();
            doc.add(image);
        } catch (DocumentException de) {
            Log.e("PDFCreator", "DocumentException:" + de);
        } catch (IOException e) {
            Log.e("PDFCreator", "ioException:" + e);
        }
        finally {
            doc.close();
        }

        mPdfView.fromFile(file)
                .pages(0, 1) // all pages are displayed by default
                .enableSwipe(true)
                .load();
        mPdfView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所得到的:

在此输入图像描述

所以我的问题是:Webview的内容太大而不适合PDF.我怎么解决这个问题?

Rak*_*thi 7

WebView具有生成PDF的内置功能,可通过使用PrintManager服务专门用于打印.但是对于您的特定用例,我建议您编写(存储)WebView的PrintAdapter的最终输出,这是一个PDF文件到本地文件并从那里开始.

此链接将引导您完成详细信息和实施. http://www.annalytics.co.uk/android/pdf/2017/04/06/Save-PDF-From-An-Android-WebView/

您可以通过上述解决方案的小调整实现API级别19(KitKat)兼容性.

这应该可以解决您的问题,但是如果您对实施有任何疑问,请告诉我.


小智 6

要从 webview 创建 pdf,您需要 android>kitkat -> sdk>=19

  btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {

                createWebPrintJob(webView);
            } else {



            }

        }
    });
Run Code Online (Sandbox Code Playgroud)

//// 功能:

private void createWebPrintJob(WebView webView) {

    PrintManager printManager = (PrintManager) this
            .getSystemService(Context.PRINT_SERVICE);

    PrintDocumentAdapter printAdapter =
            webView.createPrintDocumentAdapter();

    String jobName = getString(R.string.app_name) + " Print Test";

    if (printManager != null) {
        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());
    }
}
Run Code Online (Sandbox Code Playgroud)

我在从 webview 创建图像时遇到问题:))))