通过java本身将附件设置为密码保护



我开发了一个java邮件api程序,它可以发送邮件并附加pdf文件,因此最终发送的邮件中附加了pdf文件。

现在你可以请通知我想让,pdf文件和密码保护通过我的java程序本身例如下面我想修改我的程序如打开pdf文件密码1234,每当创建一个邮件发送客户端应该打开pdf文件,但是之前他应该在弹出框中输入1234的pdf文件,你能建议我如何在java程序中实现这一目标本身。下面是我的java程序

public class BrokMailTest {
    public static void main(String[] args) {
        String mailSmtpHost = "77.77.77.77";
        String mailSmtpPort = "4321" ;
         String mailTo = "avdg@abc.com";
        //String mailCc = "avdg@abc.com ";
        String mailFrom = "avdg@abc.com";
        String mailSubject = "*****%%%%%%%%*********Email POC Brokerage for Rel 14.0****%%%%%%%%********";
        String mailText = "Test Mail for Brokerage POC";
        sendEmail(mailTo,  mailFrom, mailSubject, mailText, mailSmtpHost ,mailSmtpPort );
    }
    public static void sendEmail(String to,  String from, String subject, String text, String smtpHost , String mailSmtpPort) {
        try {
            Properties properties = new Properties();
            properties.put("mail.smtp.host", smtpHost);
            properties.put("mailSmtpPort", mailSmtpPort);
            //obtaining the session
            Session emailSession = Session.getDefaultInstance(properties);
            Message emailMessage = new MimeMessage(emailSession);
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            //emailMessage.addRecipients(Message.RecipientType.CC, InternetAddress.parse("avdg@abc.com"));
            Address[] cc = new Address[] {
             new InternetAddress("avdg@abc.com"),
             new InternetAddress("saxenasaral@gmail.com")};
             emailMessage.addRecipients(Message.RecipientType.CC, cc);
             emailMessage.setFrom(new InternetAddress(from));
            emailMessage.setSubject(subject);
            //emailMessage.setContent(text, "text/html");
            // Create the message part
             BodyPart messageBodyPart = new MimeBodyPart();
             messageBodyPart.setContent(text, "text/html");
             messageBodyPart.setText(text);
          // Now set the actual message
             messageBodyPart.setText("This is message body");
            //emailMessage.setContent(emailMessage, "text/html");
            //emailMessage.setText(text);
            // Create a multipart message
             Multipart multipart = new MimeMultipart();

          // Part two is attachment
             messageBodyPart = new MimeBodyPart();
             String filename = "c:\SettingupRulesin outlook2003.pdf";
             DataSource source = new FileDataSource(filename);
             messageBodyPart.setDataHandler(new DataHandler(source));
             messageBodyPart.setFileName(filename);
             // Send the complete message parts
             emailMessage.setContent(multipart);
        emailSession.setDebug(true);
            // Set text message part
             multipart.addBodyPart(messageBodyPart);
            Transport.send(emailMessage);
        }    catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

摘自教程:http://itextpdf.com/examples/iia.php?id=219

public static byte[] USER = "password 1234".getBytes();
public static byte[] OWNER = "password 1234".getBytes();
public void encryptPdf(String filename, String filename) throws IOException, DocumentException {
        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();
    }

在文件字符串声明后添加encryptPdf(fileName, fileName);。编辑:使用byte[]对象作为密码名。在此版本的iText中,出于加密目的,已不支持使用字符串。

最新更新