【发布时间】:2015-11-19 08:56:03
【问题描述】:
我正在使用此代码创建一个加密的 PDF:
Document document = new Document(
new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight()));
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(RESULT1));
writer.setBoxSize("art", new Rectangle(36, 54, 555, 791));
writer.setEncryption("Vibhu".getBytes(), "Vibhu@123456789".getBytes(),
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
document.open();
// Creating Tables and Cells
document.close();
我省略了创建单元格和表格的代码以及创建可以输入名字、姓氏等值的表单的代码。
然后我像这样操作表单。
private void manipulatePdf(String src, String dest, EclaimsVO eclaimsVO,
String language) throws IOException, DocumentException {
File file = new File(src);
if (isObjectPresent(file)) {
PdfReader reader = new PdfReader(src);
PdfStamper stamper;
stamper = new PdfStamper(reader, new FileOutputStream(dest),
'\0', false);
form = stamper.getAcroFields();
addToForm("field_2", eclaimsVO.getName());
addToForm("field_3", eclaimsVO.getSurName());
stamper.close();
}
}
创建文件时,我一直在尝试通过setEncryption() 向 PDF 文件添加密码,但在读取文件时会引发此异常:
com.itextpdf.text.exceptions.BadPasswordException: Bad user password
at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:681)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:181)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:219)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:207)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197)
但是,如果我将 unethicalreading 更改为 true 并将 OWNER-PASSWORD 设置为空字符串,则不会出现异常。
writer.setEncryption("".getBytes(), "Vibhu@123456789".getBytes(),
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
PdfReader.unethicalreading = true;
现在,当我尝试打开 PDF 时,它会在没有密码提示的情况下打开。 但是当我打开 PDF 时,该文档的标题为“Sample.pdf(SECURED)”。
【问题讨论】:
-
你的问题有点奇怪。查看您的代码,就好像您想在创建 文档时设置 密码。据我所知,您提到的错误仅在您尝试 read 一个 existing 文档而不使用密码时发生。你能澄清一下吗?您是否正在创建或操作现有文档。您应该提供更多代码。
-
是的,我想在创建文档时设置密码。很抱歉给您带来麻烦。
-
在这种情况下,我不明白 (1.) 为什么你会得到异常,因为你没有使用
PdfReader和 (2.) 为什么你将unethicalreading设置为true因为你不需要解密任何东西,你只想加密一个PDF。所以我再一次问你:显示更多代码。没有更多的代码 = 没有更多的答案或 cmets(以及我投票结束问题的风险是不清楚的)。 -
我在link 阅读了一篇帖子,因此使用了不道德的阅读。我在努力。我已经编辑了代码。
-
我已经更新了你的问题。当我问:您是在创建还是在操作代码时,您没有正确回答。你以后应该更准确!