Hellow world,
So i was missing from action for few weeks now. I blame it on my work because I'm always dead tired (only can watch some films for another 4 hours) after i come back from work each day :D. Anyway once again I was given some task that seem's hard at first.
We have a mobile app in android which is not surprisingly a hybrid app. Hence, all the UI elements are HTML/javascript. One day the project managers in a weird way wanted to make a PDF out of some HTML content in display. Now the HTML content here are a dynamic table that's created based on data from a webservice + user interaction. So no way of hard-coding anything.
Todo
Retrieve dynamic HTML from a webview in Android and make a PDF from the content in it
Things you need
Download these and you need only to reference 2 libraries, those are
CODE
Let's take a look a the sample HTML i would be converting to PDF
NOTE:
So let's check the code:
Few things to note:
1) You need to add the following for the manifest to give write access to the app
2) Since our sample HTML code didnt have the opening tags like <html>, we have to put them on hand.
3) Change out.pdf to the filename you want, but to a .pdf of course :3
4) Your file can be found at /external/storage/mnt/bla/Android/data/<you app related name>/MyStorageFiles/ firectory
That's brief i know, but this would get you PDF-ing fast :D
Cya ppl
So i was missing from action for few weeks now. I blame it on my work because I'm always dead tired (only can watch some films for another 4 hours) after i come back from work each day :D. Anyway once again I was given some task that seem's hard at first.
We have a mobile app in android which is not surprisingly a hybrid app. Hence, all the UI elements are HTML/javascript. One day the project managers in a weird way wanted to make a PDF out of some HTML content in display. Now the HTML content here are a dynamic table that's created based on data from a webservice + user interaction. So no way of hard-coding anything.
Todo
Retrieve dynamic HTML from a webview in Android and make a PDF from the content in it
Things you need
- iTextPDF : an open source PDF creation library for java, works well in android too
- XMLWorker : a plugin for iTextPDF to support XML/HTML
Download these and you need only to reference 2 libraries, those are
- itextpdf-5.x.x.jar
- xmlworker-5.x.x.jar
CODE
Let's take a look a the sample HTML i would be converting to PDF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <table width="100%"> <thead> <tr> <th style="font-weight:bold;text-align:left">Item Name</th> <th style="font-weight:bold;text-align:center">Base Currency</th> <th style="font-weight:bold;text-align:right">Base Amount</th> </tr> </thead> <tbody> <tr> <td>Basic</td> <td>LKR</td> <td>75000</td> </tr> <tr> <td>Another</td> <td>LKR</td> <td>25000</td> </tr> </tbody></table> |
NOTE:
- We are using a XML parser here, so your HTML structure should be perfect. No loose ends, incomplete tags, open quotes bla bla like that
- While this supports retrieving style from external CSS files, the best thing is to embed it into the HTML code itself. Either in <style></style> tags or as inline-style.
So let's check the code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| import com.itextpdf.text.Document;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerHelper;try{ //your_html_here is a variable with all the dynamic HTML stuff String html = "<html><head></head><body>" + your_html_here + "</body></html>"; //Open a new document instance Document doc = new Document(); //We convert the string to a byte array, so we can input it to the XMLWorker instance InputStream in = new ByteArrayInputStream(html.getBytes()); //We write the file to a app accesbile location PdfWriter pdf = PdfWriter.getInstance(doc, new FileOutputStream(p.getApplication().getExternalFilesDir("MyFileStorage") + "/out.pdf")); //open the document to write doc.open(); //parser and write the file XMLWorkerHelper.getInstance().parseXHtml(pdf, doc,in); //close things before it gets messey doc.close(); in.close();}catch(Exception e){ System.out.println(e.getMessage());} |
Few things to note:
1) You need to add the following for the manifest to give write access to the app
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
3) Change out.pdf to the filename you want, but to a .pdf of course :3
4) Your file can be found at /external/storage/mnt/bla/Android/data/<you app related name>/MyStorageFiles/ firectory
That's brief i know, but this would get you PDF-ing fast :D
Cya ppl

How can i show image in a pd file as well . Please help
ReplyDeleteplz send full code
ReplyDeletesend me the full details on what you wanna do
Deletenot working when opening pdf doesnot show any result !!
ReplyDeleteUnfortunately, this can´t convert html with forms or images...
ReplyDeleteDidnt check with images but please let me know if you find a workaround
Deletewhat is p in here?? PdfWriter pdf = PdfWriter.getInstance(doc, new FileOutputStream(p.getApplication().getExternalFilesDir("MyFileStorage") + "/out.pdf"));
ReplyDeleteAnything that can gt the application instance, if you are inside an Activity, remove "p" and just call getApplication()
Delete