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

时间:2015-04-03 15:05:21

标签: 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文档(低级方法)

  4. 显然,选项1是首选方法,但我不知道如何做到这一点。当然,我可能会在这里遗漏一些东西,所以任何帮助都会受到赞赏!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

然而,这是相对的。这真的是你找到哪些库/框架更方便使用的问题,因为它们中的每一个都提供退出相同的功能,但有其自身的缺点。例如,与我合作过的人有以下几个:

  1. iText - 您必须购买licenece才能使用(见What is latest version of itext that is not AGPL?);
  2. Android Print Framework - 在第二项中提到的打印前没有内置的 pdf 预览(虽然API 21+可以使用内置PdfRenderer;另请参阅{ {3}})。另一个缺点是Display PDF within app on Android?,当你想要保存/打印时,默默地&#34; :)
  3. 即使是disturbing system dialogs状态&#34;您可以使用任何PDF生成库生成PDF文档并将其传递到Android打印框架进行打印。&#34;

    <强> ...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维,因为没有被绑定(参见official documentation)。如果你试图夸大用户尚未达到的观点,也会发生同样的事情......事实上,你无能为力,这就是Android的工作方式。

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

    在这种情况下,我建议您为用户当前正在与之交互的每个内容视图预先创建pdf页面,只需确保在画布上绘制时视图仍然存在。对于目前没有使用的视图,请使用&#34;低级方法&#34; 。请求打印后,将输出pdf传递给Android Print Framework