Learn to generate PDF documents for your Android Application
Generate a PDF document is a well mastered task by Java developers on desktop application or on web applications. On Android applications, it’s a little bit different and only a few developers add that kind of feature in their app. However, users really enjoy having some reports for monitoring applications for example. A solution can be to use iText library in your application. iText is a library created for Java applications and can be added as a Jar dependency to your Android project. Main issue is the size of the library. On Android applications, each byte is counted and so, a lightweight solution must be preferred. A lightweight and still powerful solution can be to use the Android PDF Writer (APW) implementation that is offered under BSD license and is available here : http://coderesearchlabs.com/androidpdfwriter .
Easiest solution to use APW Library in your Android project is to download the library and add the project in your build.gradle file as a dependency like that :
compile project(':apwlibrary')
Then, you have to create an instance of PDFWriter object with a given size defined thanks to constants in APW Library :
PDFWriter writer = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT);
You can now define a specific Font for your PDF :
writer.setFont(StandardFonts.SUBTYPE, StandardFonts.TIMES_BOLD, StandardFonts.WIN_ANSI_ENCODING);
And add some text :
writer.addText(x, y, size, "I like SSaurel’s Tutorials !");
Obviously, APW Library lets you to add images on your PDF :
Bitmap logo = BitmapFactory.decodeStream(assetManager.open("cpuinfo_logo.png")); Bitmap qrcode = BitmapFactory.decodeStream(assetManager.open("qrcode.png")); // center images ... int left = (PaperSize.FOLIO_WIDTH - logo.getWidth()) / 2; writer.addImage(left, PaperSize.FOLIO_HEIGHT - 490, logo); left = (PaperSize.FOLIO_WIDTH - qrcode.getWidth()) / 2; writer.addImage(left, PaperSize.FOLIO_HEIGHT - 720, qrcode);
May be now, you wanna star a new page for your PDF report ? Simply use the newPage() dedicated method :
writer.newPage();
Note that you can change font when you want in your PDF. APW Library has a lot more options. For example, you can rotate your texts or add some shapes like a rectangle.
Last step is to generate your PDF report. For that, you must get your PDF content as a string thanks to method asString() from PDFWriter instance object. Then, create a file on Android with that content as Bytes :
public void outputToFile(String fileName, String pdfContent, String encoding) { File newFile = new File(Environment.getExternalStorageDirectory() + "/" + fileName); try { newFile.createNewFile(); try { FileOutputStream pdfFile = new FileOutputStream(newFile); pdfFile.write(pdfContent.getBytes(encoding)); pdfFile.close(); } catch(FileNotFoundException e) { // ... } } catch(IOException e) { // ... } }
Then, call the method :
outputToFile("MyFirstReport.pdf", writer.asString(), "ISO-8859-1");
Now, we can show the final result with our generated report :
Like you can see, APW Library is a lightweight and powerful solution to generate quickly simple PDF documents on Android. For more complex PDF documents, a better approach will be to use iText. Heavier but surely more complete.
Leave a Reply
You must be logged in to post a comment.