Manipulação de PDF com iTEXT

Bom dia amigos do Forum!

Preciso setar a alguns PDF’s que eles não poderão ser impressos e nem copiados, acredito que eu deva adicionar uma criptografia.

Estou usando o iText, com ele ja separo, concateno, adiciono marca de agua. Mas não estou conseguindo colocar essas permissões.

E depois, quando o cara estiver com a senha fodona, ele deve permitir a impressão.

Aguém ai já fez algo parecido? Poderia me dar uma ajuda?

O código exemplo que peguei é o seguinte…

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
 
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
 
public class GeneratePDF {
 
    private static String USER_PASS = "Hello123";
 
    private static String OWNER_PASS = "Owner123";
     
     
    public static void main(String[] args) {
        try {
             
            OutputStream file = new FileOutputStream(new File("D:\\Test.pdf"));
 
            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, file);
 
            writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
                    PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
 
            document.open();
            document.add(new Paragraph("Hello World, iText"));
            document.add(new Paragraph(new Date().toString()));
 
            document.close();
            file.close();
 
        } catch (Exception e) {
 
            e.printStackTrace();
        }
    }
}

Qualquer ajuda é bem vinda!

writer.setEncryption

Sim, estou usando, mas para novos PDF’s.

Preciso pegar um PDF já existente e quando for abrir setar ou remover essas permissões

Alguma dica? Artigo? Tutorial? Codigo?

A

Esse é o codigo que eu fiz, ele até executa, mas quando vou abrir o PDF da um erro dizendo que o PDF não pode ser lido!!!

HELP!!

public class PermicaoPdf {

   	 
   	    	
   	     public static void main(String args) {
   	    	
   	    	String param[] = args.split("#");
   	   	    
   	    	String USER_PASS = param[1];
   	   	 
   	   	    String OWNER_PASS = param[2];
   	    	 
   	        try {
   	             
   	        	FileOutputStream file = new FileOutputStream(param[0]);
   	 
   	            Document document = new Document();
   	            PdfWriter writer = PdfWriter.getInstance(document, file);
   	 
   	            writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
   	                    PdfWriter.AllowPrinting , PdfWriter.ENCRYPTION_AES_128);
   	 
   	            document.open();
   	            //document.add(new Paragraph("Hello World, iText"));
   	            //document.add(new Paragraph(new Date().toString()));
   	 
   	            document.close();
   	            file.close();
   	 
   	        } catch (Exception e) {
   	 
   	            e.printStackTrace();
   	        }
   	    }
}

Verifiquei vários erros no meu código e acredito que agora cheguei perto do que preciso…
Ele grava o arquivo e talz, mas quando vou abrir ele não consegue… =/

         PdfReader splitPdf = new PdfReader(param[0]); 
         
         File saida = new File(param[3]);

         String hardPassword = param[1];
         byte[] hardPasswordByte = hardPassword.getBytes(); 

         String hardUser = param[2];
         byte[] hardUserByte = hardUser.getBytes(); 
         
         
         
         
         PdfReader reader = new PdfReader(splitPdf);

         FileOutputStream out = new FileOutputStream(saida);

         PdfStamper stamp = new PdfStamper(reader, out);

         //first argument is the user password. If set to something it asks for password when opening file, not wanted.
         stamp.setEncryption(hardUserByte, hardPasswordByte, PdfWriter.AllowPrinting, true);

Alguém me AJUDA!!!

setEncryption(null, “permission_password”.getBytes(),
~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING ), PdfWriter.ENCRYPTION_AES_256);

Esse null no inicio serve para ele não pedir password para abrir o arquivo!

Pessoal ainda estou com problemas nesse caso.

Até consigo proteger o arquivo com senha. Mas preciso que seja possivel visualizar(sem precisar de senha) mas que bloqueie a impressão e cópia.

Estou usando o Itext.

Ja tentei de 3 formas:


PdfEncryptor.encrypt(leitor, new FileOutputStream(saida), false, “”,“teste”, PdfWriter.AllowCopy | PdfWriter.AllowPrinting);


PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(saida));
stamper.setEncryption("".getBytes(), “”.getBytes(),
PdfWriter.AllowPrinting | PdfWriter.AllowCopy,
PdfWriter.STRENGTH40BITS);


PdfEncryptor.encrypt(new PdfReader(arquivo),
New FileOutputStream(saida), “”.getBytes(), “”.getBytes(),
PdfWriter.AllowDegradedPrinting | PdfWriter.AllowCopy | PdfWriter.AllowPrinting,
PdfWriter.STRENGTH128BITS);

Alguem sabe me dizer qual caminho devo seguir?

Att