【问题标题】:Save PDF from Webview on Android在 Android 上从 Webview 保存 PDF
【发布时间】:2015-01-06 14:54:23
【问题描述】:

我想将我的 webview 保存为 PDF 文件。我知道我可以使用 WebView.createPrintDocumentAdapter() 和 PrintManager.print() 打印 WebView。 但我需要一种保存 PDF 的方法,它是由 PrintDocumentAdapter 内部生成的,无需任何用户交互,因为我需要在我的应用程序中进一步处理该文件。

有什么想法吗?

【问题讨论】:

    标签: android pdf printing webview android-4.4-kitkat


    【解决方案1】:

    我意识到这个问题现在已经很老了。但我刚刚意识到如何明智地做到这一点。

    基本上根据问题,您可以使用上面提到的createPrintDocumentAdapter 方法并将结果传递给您自己的“假” PrintManager 实现,该实现只需覆盖 onWrite 方法以将输出保存到您自己的文件中。下面的 sn-p 显示了如何获取任何 PrintDocumentAdapter 并将其输出发送到文件。

    public void print(PrintDocumentAdapter printAdapter, final File path, final String fileName) {
        printAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
            @Override
            public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
                printAdapter.onWrite(null, getOutputFile(path, fileName), new CancellationSignal(), new PrintDocumentAdapter.WriteResultCallback() {
                    @Override
                    public void onWriteFinished(PageRange[] pages) {
                        super.onWriteFinished(pages);
                    }
                });
            }
        }, null);
    }
    

    正如您所见,有很多空值传递到适配器方法中,但我检查了 Chromium 源代码,这些变量从未使用过,所以空值没问题。

    我在这里创建了一篇关于如何操作的博客文章: http://www.annalytics.co.uk/android/pdf/2017/04/06/Save-PDF-From-An-Android-WebView/

    【讨论】:

    • 感谢您的回答。这正是我的解决方案。不幸的是,我忘记更新此页面。看看this question使用除了android.print之外的其他包,也许你想更新你的博客文章:)
    • @Andreas 感谢您的回答,我看到了您的博客文章,但是如何在 android.print 包中创建一个类,它是一个系统包?
    • 对不起,我忘了发布我提到的问题的链接。 stackoverflow.com/questions/29353382/…有了这个解决方案就不需要在android.print包中创建类了
    • @BrettCherrington 嘿,我想知道你的意思:放在android.print 包中
    • @hyperfkcb 抱歉回复延迟。您必须将上述内容放在 android.print 包中的一个类中,因为它使用包级受保护的方法/类。
    【解决方案2】:

    创建一个自定义 WebViewClient (reference) 并将其设置在您的 WebView 上。

    在这个WebViewClient 中,您应该覆盖shouldOverrideUrlLoading (WebView view, String url)。从这里开始,您可以在单击 PDF 时手动下载它。

    【讨论】:

    • 他们要求将 WebView 的内容保存为 pdf。不下载现有的 pdf 文件。
    • @FabianStreitel 因此我建议覆盖 WebView 行为:这允许您拦截 URL 加载并改为下载它。在实践中,您可能会显示一个原生 Android 弹出窗口来询问用户是否要查看或下载 PDF。
    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多