【问题标题】:What is the best strategy for creating, displaying and printing pdf documents in android在android中创建、显示和打印pdf文档的最佳策略是什么
【发布时间】:2015-04-03 15:05:21
【问题描述】:

我打算使用内置的 android pdf 库。在我的应用程序中,我需要显示一个可能包含几页的 pdf 报告。用户应该能够打印这些页面。使用 PrintDocumentAdapter 打印似乎很简单,但我不清楚创建 pdf 的最佳方法是什么。我知道您可以仅使用 View/canvas 生成 PdfDocument,或者采用更“低级”的方法来绘制线条、文本、绘画等。

我看到了三种可能性:

  1. 为每个页面创建一个视图。用户可以根据需要在视图之间导航并打印。但是,我不清楚如何为每个页面/视图生成 pdf。我的意思是,如果我正在查看页面/视图 1,是的,我可以轻松地从中创建一个 pdf,但是其他页面呢?是的,我可以在内存中保存它,但我发现如果它们没有主动显示在屏幕上,它们会创建空的 pdf。我不想让用户单独打印每一页。

  2. 创建 pdf 文档(低级方法),集成 pdf 阅读器并从那里显示/打印 pdf。

  3. 为用户可以浏览的每个页面创建一个视图。调用打印选项时,再次生成pdf文档(低级方法)

显然选项 1 是首选方法,但我不清楚如何做到这一点。当然,我可能会在这里遗漏一些东西,因此我们将不胜感激!

【问题讨论】:

    标签: android android-print-framework android-pdf-api


    【解决方案1】:

    Android没有内置pdf生成库,但是在API19中android提供了一个apihttps://developer.android.com/reference/android/graphics/pdf/PdfDocument.html

    但正如@Ivan Wooll 所说,如果您想使用,itext 是一个不错的 pdf 生成库。

    【讨论】:

    • 请说出拒绝投票的原因?它会帮助我提高。
    【解决方案2】:

    ...but what's unclear to me is what is the best way to create the pdf...

    然而,它是相对的。这实际上是您发现使用哪种库/框架更方便的问题,因为它们中的每一个都提供了相同的功能,但也有自己的缺点。例如,与我共事的人有以下几种:

    1. iText - 您必须购买用于商业用途的许可证(请参阅What is latest version of itext that is not AGPL?);
    2. Android 打印框架 - 如您在第二项中提到的,在打印前没有内置 pdf 预览(您可以使用内置的 PdfRenderer 尽管 API 21+;另请参阅 Display PDF within app on Android? )。另一个缺点是disturbing system dialogs,当您想“静默”保存/打印时:)

    甚至official documentation 声明“您可以使用任何 PDF 生成库来生成 PDF 文档并将其传递给 Android 打印框架进行打印。”

    ...Yes I can have this in memory, but what I've found is if they aren't actively being displayed on screen, they create empty pdfs...

    当您将用户留下的视图保留在内存中时,空 pdfs 的原因是它们的 0 维,因为它们没有被布置(参见 Android: PdfDocument generates empty pdf)。如果您尝试夸大用户尚未访问的视图,也会发生同样的情况……事实上,您无能为力,这就是 Android 的工作原理。

    I don't want to have the user print each page individually.

    在这种情况下,我建议您为用户当前正在与之交互的每个内容视图提前创建pdf 页面,只需确保在画布上绘制视图时仍保持布局。对于当前未布置的视图,请使用“低级方法”。一旦请求打印,将输出pdf 传递给Android Print Framework

    【讨论】:

      【解决方案3】:

      那里有一些 pdf 生成库。 Itext 是最简单的使用,但它非常昂贵。 Pdfjet 是另一种价格合理的产品。我敢肯定,快速谷歌会为您提供更多信息。

      【讨论】:

      • 感谢您的信息。我的计划是简单地将内置库与 android 一起使用。
      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 2022-11-10
      • 2017-08-06
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多