Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add PDFBox to an Android project or suggest alternative

I'm attempting to open an existing pdf file and then add another page to the pdf document from within an Android application. On the added page, I need to add some text and an image.

I am wanting to give PDFBox a try. Other solutions such as iTextPDF aren't suitable for our company because of the licencing terms/price.

I have a library project with the main code base, and also full and lite projects that reference the library project.

I have downloaded the jar from http://pdfbox.apache.org/download.html and copied it into the library projects lib folder and added the pdfbox-app-1.6.0.jar file to the java build path libraries.

I am able to import the librarys successfully eg import org.apache.pdfbox.pdmodel.PDDocument; and compile all the projects. However when I run the application it crashes on PDDocument document = new PDDocument(); with the following error.

E/AndroidRuntime(24451): java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.PDDocument

I read somewhere that version 1.5 of PDFBox onwards didn't work with Android so I tried downloading the pdfbox-app-1.4.0.jar file but got the same issue. I also added the library to the build path in my full and lite projects but I got the same error or eclipse kept crashing with an out of memory error.

Can anyone tell me what I am doing wrong? Have I downloaded the wrong file? Have I imported it correctly?

Thanks,

like image 705
Dittimon Avatar asked Jan 24 '12 00:01

Dittimon


People also ask

What is PDFBox?

PDFBox is an open-source library which is written in Java. It supports the development and conversion of PDF Documents. PDFBox Library comes as a JAR file. It allows the creation of new PDF documents, manipulation of existing documents, bookmarking PDF and the ability to extract content from PDF documents.

Is PDFBox thread safe?

Is PDFBox thread safe? No! Only one thread may access a single document at a time. You can have multiple threads each accessing their own PDDocument object.


2 Answers

PDFBox uses java awt and swing, even for non UI tasks, I've tried to remove references but there are a lot of files, and I was removing too much stuff

I've just tested PDFjet http://pdfjet.com/os/edition.html it's bsd licensed (plus commercial version with more features), with this sample code (ripped from Example_03.java) I was able to convert a jpeg to a pdf

    FileOutputStream fos = null;     try     {         fos = new FileOutputStream("/sdcard/sample.pdf");         PDF pdf = new PDF(fos);         InputStream f = getApplicationContext().getAssets().open("img0.jpg");          Image image = new Image(pdf, f, ImageType.JPEG);         Page page = new Page(pdf, A4.PORTRAIT);         image.setPosition(0, 0);         image.drawOn(page);         pdf.flush();         fos.close();     } catch (Exception e)     {         e.printStackTrace();     } 

I found the link here http://java-source.net/open-source/pdf-libraries

like image 61
sherpya Avatar answered Oct 13 '22 03:10

sherpya


Android Port of PDFBox

There's a free Android Port of PDFBox available here:

https://github.com/TomRoush/PdfBox-Android

like image 41
Jason Avatar answered Oct 13 '22 03:10

Jason