从WebView创建PDF会截断PDF

时间:2016-12-29 19:24:02

标签: android pdf webview android-webview

我一直在尝试使用PdfDocument将Android WebView转换为PDF。以下是代码:

WebView的初始化:

private void createPdf(File file) {
    try {
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create(); //A4 page
        PdfDocument.Page page = document.startPage(pageInfo);

        View content = webView;
        content.draw(page.getCanvas());
        document.finishPage(page);
        document.writeTo(new FileOutputStream(file));
        document.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

转换为PDF:

public void createWebPrintJob(WebView webView, Context context) {
    // Get a PrintManager instance
    PrintManager printManager = (PrintManager) context
            .getSystemService(Context.PRINT_SERVICE);

    // Get a print adapter instance
    PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

    // Create a print job with name and adapter instance
    String jobName = context.getString(R.string.app_name) + " Document";
    printManager.print(jobName, printAdapter,
            new PrintAttributes.Builder().build());
}

上面的代码给了我这个PDF。下面是PDF的截图:

enter image description here

现在,当我更改WebView设置并添加webSettings.setUseWideViewPort(true)时,它会给出下面的PDF以及上面的代码: enter image description here

我还使用以下代码直接从Android设备打印:

{{1}}

此代码正确呈现WebView并将其发送到打印机。它给出了以下屏幕: enter image description here

我有几个问题:

  1. 如何更改createPdf()以便它为我提供如图3中的PDF?

  2. 图片3仍然是两页,而PDF适合一页。我是否需要为此修改我的HTML代码?

  3. 假设我的HTML很庞大,并且它不适合一个A4页面。我是否需要使用PdfDocument.Page和startPage()以及finishPage()手动创建单独的页面?如何根据页面大小拆分WebView? 有没有自动创建页面的方法?

0 个答案:

没有答案