5

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

我看到了三种可能性:

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

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

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

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

4

3 回答 3

2

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

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

于 2015-04-08T09:26:02.503 回答
0

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

于 2015-04-03T15:13:58.323 回答
0

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

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

  1. iText - 您必须购买用于商业用途的许可证(请参阅非 AGPL 的 itext 的最新版本是什么?);
  2. Android 打印框架 - 如您在第二项中提到的,在打印之前没有内置的pdf预览(尽管 API 21+,您可以使用内置的PdfRenderer ;另请参阅在 Android 上的应用程序内显示 PDF?)。另一个缺点是当您想“静默”保存/打印时会出现令人不安的系统对话框:)

甚至官方文档都说“你可以使用任何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...

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

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

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

于 2015-04-10T22:38:47.677 回答