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.
Asked
Active
Viewed 7,092 times
1
-
Refer this link http://stackoverflow.com/questions/29730402/how-to-convert-android-view-to-pdf – Vadivel Nov 21 '16 at 03:32
-
Its giving me 1/4th of the screen in the pdf. I am not getting the full width and height – sagar suri Nov 21 '16 at 05:30
-
You can find the Code and explanation here: https://stackoverflow.com/a/66040891/14959221 – Kayes Fahim Feb 04 '21 at 07:16
2 Answers
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