I am trying to create PDF file using android API PdfDocument.
If the contents are less (within visible view of the screen) - my code works fine.
If recyclerView contains more items (more than screen height) - all content do not get printed in PDF.
Here is my code:
public void exportDataPDF(View view) {
PrintAttributes printAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_COLOR).
setMediaSize(PrintAttributes.MediaSize.ISO_A2).
setResolution(new PrintAttributes.Resolution("MyPrinterId", PRINT_SERVICE, 50, 50)).
setMinMargins(new PrintAttributes.Margins(5,5,5,5)). //PrintAttributes.Margins.NO_MARGINS
build();
PdfDocument pdfDocument = new PrintedPdfDocument(this, printAttrs);
int pageNumber = 1;
//Get Content View.
View contentView = findViewById(R.id.recyclerView);
// crate a page description
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(contentView.getWidth(), contentView.getHeight(), pageNumber).create();
// create a new page from the PageInfo
PdfDocument.Page page = pdfDocument.startPage(pageInfo);
// draw view on the page
Canvas pageCanvas = page.getCanvas();
pageCanvas.scale(1f, 1f);
int pageWidth = pageCanvas.getWidth();
int pageHeight = pageCanvas.getHeight();
int measureWidth = View.MeasureSpec.makeMeasureSpec(pageWidth, View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(pageHeight, View.MeasureSpec.EXACTLY);
contentView.measure(measureWidth, measuredHeight);
contentView.layout(0, 0, pageWidth, pageHeight);
contentView.draw(pageCanvas);
// do final processing of the page
pdfDocument.finishPage(page);
try {
FileOutputStream fileOutputStream = openFileOutput(exportFileName, MODE_PRIVATE);
pdfDocument.writeTo(fileOutputStream);
fileOutputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Could someone please help me to print all content of recyclerView items in PDF. I don't want to use external library like iText or others.