【发布时间】:2015-05-27 09:39:13
【问题描述】:
我已经开发了一个 java 邮件 api 程序,它可以发送邮件并附加 pdf 文件,所以最后会发送一封邮件,其中附加了 pdf 文件,并且该 pdf 将受到密码保护,因此我使用 itext图书馆
所以我在下面开发了这段代码
private static final byte[] USER = "password 1234".getBytes();
private static final byte[] OWNER = "password 1234".getBytes();
// attachment part
MimeBodyPart attachPart = new MimeBodyPart();
String filename = "c:\\index.pdf";
PdfReader reader = new PdfReader(filename);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
stamper.setEncryption(USER, OWNER,
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
reader.close();
DataSource source = new FileDataSource(filename);
attachPart.setDataHandler(new DataHandler(source));
attachPart.setFileName(filename);
但我收到以下错误,请告知如何继续
Exception in thread "main" java.io.FileNotFoundException: c:\index.pdf (The requested operation cannot be performed on a file with a user-mapped section open)
现在您能否建议我想通过我的 java 程序本身将该 pdf 文件设置为密码保护,例如我想修改我的下面的程序,例如用于打开 pdf 文件的密码 1234 创建和发送邮件时客户应该打开pdf文件,但是在打开之前他应该在pdf文件的弹出框中输入1234来查看它,请您告诉我如何在java程序本身中实现这一点。在此先感谢下面是我的java程序
【问题讨论】:
-
您是否检查过 index.pdf 存在于 C 驱动器中吗?我怀疑它是异常状态 File is Not found 。
-
第一件事是不要尝试同时读取和写入同一个文件。写入一个临时文件,然后附加它。
-
@RealSkeptic 谢谢,你能不能更新我的帖子,这将有助于掌握更多谢谢 inadvance
-
@NeerajJain 是的,文件非常存在
-
我刷新以确保,但您仍在读取和写入同一个文件。