1

I tried a lot searching over the internet but I didn't find any solution regarding this. My problem is I have a layout called main.xml whose parent layout is a LinearLayout and it is scrollable. I want to generate a pdf of that layout. The layout consist of reports so I want to export those reports in pdf format. How can I do it Please help.

sagar suri
  • 4,351
  • 12
  • 59
  • 122

2 Answers2

1

You can use this library to make it easy to do within a few lines of code -

 PdfGenerator.getBuilder()
                        .setContext(context)
                        .fromLayoutXMLSource()
                        .fromLayoutXML(R.layout.layout_your_scroll_view)
                        .setDefaultPageSize(PdfGenerator.PageSize.A4)
                        .setFileName("Test-PDF")
                        .build();

You can also set inflated scroll view(s) instance (both single or multiple views) in it. Additionally you can also pass a callback (PdfGeneratorListener()) in .build() to notify about if the pdf generation is done or failed for an exception

Gk Mohammad Emon
  • 6,084
  • 3
  • 42
  • 42
0

At last I got the solution for my problem. Now I can easily convert any view to PDF using itextpdf.jar file. I will post my code here. This method will save the view in bitmap format.

public void saveViewImage(View view){
    File file = saveBitMap(this, layout);    //which view you want to pass that view as parameter
    if (file != null) {
        Log.i("TAG", "Drawing saved to the gallery!");
    } else {
        Log.i("TAG", "Oops! Image could not be saved.");
    }
}

private File saveBitMap(Context context, View drawView){
    File pictureFileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Handcare");
    if (!pictureFileDir.exists()) {
        boolean isDirectoryCreated = pictureFileDir.mkdirs();
        if(!isDirectoryCreated)
            Log.i("ATG", "Can't create directory to save the image");
        return null;
    }
    String filename = pictureFileDir.getPath() +File.separator+ System.currentTimeMillis()+".jpg";
    File pictureFile = new File(filename);
    Bitmap bitmap =getBitmapFromView(drawView);
    try {
        createPdf(bitmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        pictureFile.createNewFile();
        FileOutputStream oStream = new FileOutputStream(pictureFile);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, oStream);
        oStream.flush();
        oStream.close();
    } catch (IOException e) {
        e.printStackTrace();
        Log.i("TAG", "There was an issue saving the image.");
    }
    scanGallery( context,pictureFile.getAbsolutePath());
    return pictureFile;
}
//create bitmap from view and returns it
private Bitmap getBitmapFromView(View view) {
    //Define a bitmap with the same size as the view
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(returnedBitmap);
    //Get the view's background
    Drawable bgDrawable =view.getBackground();
    if (bgDrawable!=null) {
        //has background drawable, then draw it on the canvas
        bgDrawable.draw(canvas);
    }   else{
        //does not have background drawable, then draw white background on the canvas
        canvas.drawColor(Color.WHITE);
    }
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return returnedBitmap;
}

Now the below method is used to generate the pdf

private void createPdf(Bitmap bitmap) throws IOException, DocumentException {

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    Image signature;
    signature = Image.getInstance(stream.toByteArray());
    signature.setAbsolutePosition(50f, 100f);
    signature.scalePercent(60f);
    //Image image = Image.getInstance(byteArray);
    File pdfFolder = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOCUMENTS), "pdfdemo");
    if (!pdfFolder.exists()) {
        pdfFolder.mkdirs();
        Log.i("Created", "Pdf Directory created");
    }

    //Create time stamp
    Date date = new Date() ;
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(date);

    File myFile = new File(pdfFolder + timeStamp + ".pdf");

    OutputStream output = new FileOutputStream(myFile);
    //Step 1
    Document document = new Document();

    //Step 2
    PdfWriter.getInstance(document, output);

    //Step 3
    document.open();

    //Step 4 Add content
    document.add(signature);
    //document.add(new Paragraph(text.getText().toString()));
    //document.add(new Paragraph(mBodyEditText.getText().toString()));

    //Step 5: Close the document
    document.close();
}
sagar suri
  • 4,351
  • 12
  • 59
  • 122