Android 从WebView创建PDF会截断PDF

Android 从WebView创建PDF会截断PDF,android,pdf,webview,android-webview,Android,Pdf,Webview,Android Webview,我一直在尝试使用PdfDocument将Android WebView转换为PDF。代码如下: WebView的初始化: WebView webView = (WebView) findViewById(R.id.invoice_web_view); WebSettings webSettings = webView.getSettings(); webSettings.setBuiltInZoomControls(true); webSettings.setLoadWithOverviewMo

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

WebView的初始化:

WebView webView = (WebView) findViewById(R.id.invoice_web_view);
WebSettings webSettings = webView.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setDefaultTextEncodingName("UTF-8");
转换为PDF格式:

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。以下是PDF的截图:

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

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

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());
}
此代码正确呈现WebView并将其发送到打印机。它给出了以下屏幕:

我有几个问题:

  • 如何更改createPdf(),使其生成如图3所示的PDF

  • 图3仍然有两页,而PDF只占一页。我需要为此修改HTML代码吗

  • 假设我的HTML太大了,不能放在一张A4纸上。是否需要使用PdfDocument.Page和startPage()以及finishPage()手动创建单独的页面?如何根据页面大小拆分WebView? 有没有自动创建页面的方法


  • 你试过这个吗?“@Starlord我不喜欢使用iText,因为他们需要你购买商业许可证。我相信一定有办法利用Android内置的PdfDocument生成PDF。Android在打印WebView时会这样做。我怎样才能做到这一点?@varun你找到解决这个问题的方法了吗?我也遇到了同样的问题…刚刚找到了解决方案,看看这个答案:@varun你找到这个问题的答案了吗?