在android中创建,显示和打印pdf文档的最佳策略是什么?

bmu*_*tro 5 android android-print-framework android-pdf-api

我打算使用内置的android pdf库.在我的应用程序中,我需要显示一个可能包含多个页面的pdf报告.用户应该能够打印这些页面.使用PrintDocumentAdapter进行打印看起来非常简单,但对我来说不清楚的是创建pdf的最佳方法是什么.我知道您可以使用View/canvas生成PdfDocument,或者在绘制线条,文本,绘画等时采用更"低级"的方法.

我看到三种可能性:

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

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

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

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

Oni*_*nik 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.