在android studio中设置pdf文件密码
我正在使用这种方法使用 pdfDocument
库生成 pdf 文件。这是我的代码,包含在 MainActivity.java
文件中
声明变量
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;
覆盖 oncreate 函数
@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 函数
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();
}
我在任何地方搜索以查找如何为 pdf 文件设置密码,似乎 pdfDocument
库没有提供一个函数来执行此操作。在android中创建pdf文件时有没有任何库或方法可以设置密码?
注意:我尝试使用 itext core 7 和以下版本 7.2.0
但由下面的代码生成的 pdf 文件已损坏。我尝试将 pdf 库降级到工作版本 5.5.3.1
,但该版本不再存在。无论如何,这是我使用 itext core 7 实现生成 pdf 的方法
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();
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();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我的问题使用 itext core 7.1^ 解决,如上面 KJ 提到的。对于那些想知道如何实现或代码的人,以下是如何实现的:
build.gradle
AndroidManifest
PermissionChecker
PermissionActivity< /strong>
主要活动
结论
为 pdf 文件设置密码的主要部分是使用 WriterProperties 作为 PdfWriter 对象的第二个参数。
My problem solved using itext core 7.1^ as K J mentioned above. For those of you who want to know how the implementation or the code, here is how:
build.gradle
AndroidManifest
PermissionChecker
PermissionActivity
Main Activity
Conclusion
The main part to set password for pdf file is using WriterProperties as second parameter of PdfWriter object.