如何在Android应用程序中创buildPDF?

有什么办法从Android应用程序创buildPDF文件?

如果有人想在Android设备上生成PDF,请按照以下步骤操作:

如果您正在开发API级别为19或更高的设备,则可以使用内置的PrintedPdfDocument: http : //developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html

// open a new document PrintedPdfDocument document = new PrintedPdfDocument(context, printAttributes); // start a page Page page = document.startPage(0); // draw something on the page View content = getContentView(); content.draw(page.getCanvas()); // finish the page document.finishPage(page); . . . // add more pages . . . // write the document content document.writeTo(getOutputStream()); //close the document document.close(); 

制作具有复杂function的PDF的技巧是使用所需的xml布局进行虚拟活动。 然后,您可以打开这个虚拟活动,以编程方式截图并使用此库将该图像转换为pdf。 当然有限制,如不能滚动,不超过一页,但对于有限的应用程序,这是快速和容易的。 希望这可以帮助别人!

有点迟了,我还没有自己testing,但另一个在BSD许可证下的图书馆是Android PDF Writer 。

更新我已经尝试过自己的图书馆。 适用于简单的pdf世代(它提供了添加文本,线条,矩形,位图,字体的方法)。 唯一的问题是生成的PDF存储在内存中的string中,这可能会导致大文档中的内存问题。

在Android中find完全解决将任意HTML转换为带有非英文字母的PDF的问题并不容易。 我testing它的俄文unicode字母。

我们使用三个库:

(1) Jsoup (jsoup-1.7.3.jar)用于从HTML到XHTML的转换,

(2) iTextPDF (itextpdf-5.5.0.jar),

(3) XMLWorker (xmlworker-5.5.1.jar)。

 public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){ final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName(); File path = new File( Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME ); if ( !path.exists() ){ path.mkdir(); } File file = new File(path, fileName); try{ Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); document.open(); // Подготавливаем HTML String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() ); InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() ); // Печатаем документ PDF XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, null, Charset.defaultCharset(), new MyFont()); document.close(); return true; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (DocumentException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } 

难题是使用iTextPDF XMLWorker库在PDF中显示俄文字母。 为此,我们应该创build我们自己的FontProvider接口的实现:

 public class MyFont implements FontProvider{ private static final String FONT_PATH = "/system/fonts/DroidSans.ttf"; private static final String FONT_ALIAS = "my_font"; public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); } @Override public Font getFont(String fontname, String encoding, boolean embedded, float size, int style, BaseColor color){ return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, size, style, color); } @Override public boolean isRegistered(String name) { return name.equals( FONT_ALIAS ); } } 

这里我们使用位于系统文件夹中的标准Android字体Droid Sans:

 private static final String FONT_PATH = "/system/fonts/DroidSans.ttf"; 

PDFJet提供了一个openSource版本的库,应该能够处理任何基本的PDF生成任务。 这是一个纯粹的基于Java的解决scheme,据说与Android兼容。 有一个商业版本的一些额外的function,似乎并不太昂贵。

晚了,但与请求有关,希望有所帮助。 如果使用外部服务(如CommonsWare的回复中所build议的那样),则Docmosis有一个云服务可以帮助 – 将处理卸载到执行繁重处理的云服务。 这种方法在某些情况下是理想的,但当然依赖于networking连接。

U也可以使用PoDoFo库。 主要目标是在LGPL下发布。 由于它是用C ++编写的,所以你应该使用NDK交叉编译并编写C端和Java包装器。 一些第三方库可以在OpenCV项目中使用。 在OpenCV项目中,U也可以findandroid.toolchain.cmake文件,它可以帮助你生成Makefile