在Android上从Webview创建PDF

时间:2017-02-21 19:49:00

标签: android pdf 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;
    }

其次,我创建并显示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);
}

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

enter image description here

所以我的问题是: Webview的内容太大,无法容纳在PDF中。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

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)兼容性。

这可以解决您的问题,但是如果您遇到任何实施问题,请告诉我。

答案 1 :(得分:4)

从webview创建pdf你需要android> kitkat - > SDK> = 19

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

////功能:

distances.sort(key=lambda x: x[1])

我在使用webview创建图片时遇到问题:))))