user3323135
user3323135

Reputation: 13

Give password protection to existing pdf file

Am trying to give password to an existing pdf file. It is working for a jasper report which is saved with .jrxml or .jasper but how to give it for pdf file.

Sample code:

public static void main(String[] args) {
    String USER="Sai123";
    String OWNER="Sairam";

    try {
        InputStream input=new FileInputStream(new File("D:\\Project1\\EmailSendExample\\WebContent\\PDFiles\\AnnexI.pdf")); 
        OutputStream file = new FileOutputStream(new File("D:\\Test.pdf"));
        /*PdfReader reader = new PdfReader(input);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("D:\\Test.pdf"));
        stamper.setEncryption(PdfWriter.ALLOW_PRINTING, OWNER,USER, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
            stamper.close();
            reader.close();*/

        JRPdfExporter exporter = new JRPdfExporter();

        //exporter.setParameter(JRExporterParameter.INPUT_FILE, new File("D:\\Project1\\EmailSendExample\\WebContent\\PDFiles\\AnnexI.pdf"));
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new File("D:\\Test.pdf"));
        exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "Sai123");
        exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "Sairam");
        exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
        exporter.exportReport();
        System.out.println("Report Generation Complete");

        file.close();

    } catch (Exception e) {

        e.printStackTrace();
    }

it is throwing error like

net.sf.jasperreports.engine.JRException: No input source supplied to the exporter.
at net.sf.jasperreports.engine.JRAbstractExporter.setInput(JRAbstractExporter.java:922)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:296)
at pdfpassword.main(pdfpassword.java:45)

Thanks in advance for your valuable suggestions.

Upvotes: 1

Views: 2037

Answers (2)

saurabh
saurabh

Reputation: 31

According to me,we cannot provide pdf file as input to JRexporter.  so in order to make existing pdf password protected use the code below.It works for me.  

code:


private static String USER_PASSWORD = "password";
private static String OWNER_PASSWORD = "naveen";
public static void main(String[] args) throws IOException {
try
{
PdfReader pdfReader = new PdfReader("/home/base/Desktop/newtask/ext.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader,new FileOutputStream("/home/base/Desktop/newtask/ext1.pdf"));
pdfStamper.setEncryption(USER_PASSWORD.getBytes(),OWNER_PASSWORD.getBytes(), PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128);
pdfStamper.close();
      } catch (FileNotFoundException e)
      {
         e.printStackTrace();
      } catch (com.itextpdf.text.DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} 

Upvotes: 3

Ninad Pingale
Ninad Pingale

Reputation: 7069

I see this line commented -

//exporter.setParameter(JRExporterParameter.INPUT_FILE, new File("D:\\Project1\\EmailSendExample\\WebContent\\PDFiles\\AnnexI.pdf"));

And exception talks about input -

net.sf.jasperreports.engine.JRException: No input source supplied to the exporter.

Upvotes: 1

Related Questions