droidtext adding image doesn't work

1.4k Views Asked by At

I am desperately trying to insert an image into an existing pdf with droidtext.

The original version of this project was made with iText. So the code already exists and was modified to fit for Android.

What I do is I take an existing PDF as background. Insert text and crosses at specified positions within this pdf. Like filling out a form. This works quite well so far without changing the code drastically.

Now I want to set an image to the bottom of the page to sign the form. I used my original code and adapted it a little. Which doesn't work at all. I tried to set the image at a specific position. Maybe that was the error.

So i tried to do it the "official" way. The Pengiuns.jpg image is located on the sd-card.

try {
Document document = new Document();
File f=new File(Environment.getExternalStorageDirectory(), "SimpleImages.pdf");
PdfWriter.getInstance(document,new FileOutputStream(f));
document.open();
document.add(new Paragraph("Simple Image"));
String path = Environment.getExternalStorageDirectory()+"/Penguins.jpg";

if (new File(path).exists()) {
    System.out.println("filesize: " + path + " = " + new File(path).length());
}

Image image =Image.getInstance(path);
document.add(image);
document.close();
} catch (Exception ex) {
    System.out.println("narf");
}

But still no image at all. What I get is an PDF with the words "Simple Image" on it and nothing else. I can access the picture. I get the correct filesize by the if(). No exceptions are thrown.

So my questions are, how do I get an Image located on the SD-Card into my pdf? What is the mistake here? But most importantly how do I set the image to a specific location with size within the pdf? In my original code i use setAbsolutePosition( x, y ) for that. Eclipse is not complaining when I use it in the code but is it really working?

2

There are 2 best solutions below

0
On

The reason why you are getting the "Simple Image" is because you have it in Paragraph. In order to add an image, use:

Image myImg1 = Image.getInstance(stream1.toByteArray());

If you want to have it as a footer in the last page you can use the following code but it works with text. You can try to manipulate it for image:

Phrase footerText = new Phrase("THIS REPORT HAS BEEN GENERATED USING INSPECTIONREPORT APP");
HeaderFooter pdfFooter = new HeaderFooter(footerText, false);
doc.setFooter(pdfFooter);

Here is sample code. Here I have uploaded an image to Imageview and then added to pdf. Hope this helps.

private String NameOfFolder = "/InspectionReport"; 

Document doc = new Document();

try {   //Path to look for App folder 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + NameOfFolder;
    String CurrentDateAndTime= getCurrentDateAndTime();   

    // If App folder is not there then create one
    File dir = new File(path);
    if(!dir.exists())
        dir.mkdirs();


    //Creating new file and naming it
    int i = 1;  

    File file = new File(dir, "Inspection"+Integer.toString(i)+"-" + CurrentDateAndTime+".pdf");
    while(file.exists()) {
        file = new File(dir, "Inspection"+Integer.toString(i++)+"-" + CurrentDateAndTime+".pdf");}


        String filep= file.toString();
        FileOutputStream fOut = new FileOutputStream(file);

        Log.d("PDFCreator", "PDF Path: " + path);
        PdfWriter.getInstance(doc, fOut);
        Toast.makeText(getApplicationContext(),filep , Toast.LENGTH_LONG).show();

        //open the document
        doc.open();

        ImageView img1 = (ImageView)findViewById(R.id.img1);
        ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
        Bitmap bitmap1 = ((BitmapDrawable)img1.getDrawable()).getBitmap();
        bitmap1.compress(Bitmap.CompressFormat.JPEG, 100 , stream1);
        Image myImg1 = Image.getInstance(stream1.toByteArray());
        myImg1.setAlignment(Image.MIDDLE);

        doc.add(myImg1);
0
On

Try following code:

/* Inserting Image in PDF */
ByteArrayOutputStream stream = new ByteArrayOutputStream();

Bitmap bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.android);

bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream);

Image myImg = Image.getInstance(stream.toByteArray());

myImg.setAlignment(Image.MIDDLE);

//add image to document
doc.add(myImg);