I am using this approach to generate pdf file with pdfDocument library. Here is my code wrapped in MainActivity.java file
declared variable
private static final int PERMISSION_REQUEST_CODE = 200;
Button generatePDFbtn;
// declaring width and height
// for our PDF file.
int pageHeight = 1120;
int pagewidth = 792;
// creating a bitmap variable
// for storing our images
Bitmap bmp, scaledbmp;
override oncreate function
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
generatePDFbtn = findViewById(R.id.idBtnGeneratePDF);
bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.test.png, options);
scaledbmp = Bitmap.createScaledBitmap(bmp, 140, 140, false);
// below code is used for
// checking our permissions.
if (checkPermission()) {
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
} else {
requestPermission();
}
generatePDFbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// calling method to
// generate our PDF file.
try {
generatePDF();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
generatePDF function
private void generatePDF() throws FileNotFoundException {
PdfDocument pdfDocument = new PdfDocument();
Paint paint = new Paint();
Paint title = new Paint();
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(pagewidth, pageHeight, 1).create();
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);
Canvas canvas = myPage.getCanvas();
canvas.drawBitmap(scaledbmp, 56, 40, paint);
title.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
title.setTextSize(15);
title.setColor(ContextCompat.getColor(this, R.color.purple_200));
canvas.drawText("A portal for IT professionals.", 209, 100, title);
canvas.drawText("Geeks for Geeks", 209, 80, title);
title.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
title.setColor(ContextCompat.getColor(this, R.color.purple_200));
title.setTextSize(15);
title.setTextAlign(Paint.Align.CENTER);
canvas.drawText("This is sample document which we have created.", 396, 560, title);
pdfDocument.finishPage(myPage);
File directoryFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File saveFile = new File(directoryFile, "test.pdf");
try {
pdfDocument.writeTo(new FileOutputStream(saveFile));
Toast.makeText(MainActivity.this, "PDF file generated successfully.", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
pdfDocument.close();
}
I googled anywhere to find how to set password for pdf file and it seems pdfDocument library does not provide a function to do so. Is there any library or way to set password when pdf file is created in android?
NOTE: I tried using itext core 7 with following version 7.2.0 but the pdf file which generated by code below is corrupted. I tried to downgrade the pdf library to worked version which 5.5.3.1, but that version is no longer exist anymore. Anyway, here is the way I am implementing generate pdf using itext core 7
String pdfPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
File file = new File(pdfPath, "test.pdf");
PdfWriter writer = new PdfWriter(file);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
Paragraph paragraph = new Paragraph("Technology").setTextAlignment(TextAlignment.CENTER)
.setFontSize(15);
document.add(paragraph);
document.close();