jueves, 5 de febrero de 2009

Poner clave a un PDF

Después de mucho darle vueltas al tema lo he conseguido.

Necesitaba un programa para ejecuar desde linea de comandos que le pasara un PDF y le pusiera una clave. Encontré multitud de programas que lo hacían en entorno de escritorio, incluso encontré uno que lo hacía desde linea de comandos (PdfEncrypt). Pero este último lanzaba unas ventanas muy molestas cada vez que encriptaba un PDF.

Entonces fue cuando decidí crear mi propio encriptador de PDFs. Y buscando encontré unas librerías en Java para la manipulación de PDFs (itext) y además de otras muchas cosas podía encriptar PDFs. Así que me puse manos a la obra y este fue el resultado.
import java.io.FileOutputStream;
import java.io.File;
import com.lowagie.text.pdf.PdfEncryptor;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
/**
* Encriptador de PDFs
* @author José Manuel Ruiz Baena
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String PdfOriginal,PdfEncriptado,Clave;
try{
PdfOriginal = args[0];
PdfEncriptado = args[1];
Clave = args[2];
}catch(Exception ex){
ayuda();
return;
}

try{
File pdf = new File(PdfOriginal);
if(pdf.exists()){
PdfReader reader = new PdfReader(PdfOriginal);
PdfEncryptor.encrypt(reader,
new FileOutputStream(PdfEncriptado),
Clave.getBytes(),
"".getBytes(),
PdfWriter.ALLOW_PRINTING,
false);
}else
System.out.println("El fichero no existe");
}catch ( Exception e ) {
e.printStackTrace();
}
}
//Ayuda, explica el orden a seguir para pasar los parámetros a la aplicación
public static void ayuda(){
System.out.println("Necesita definir algunos argumentos para que la aplicacion funcione correctamente.");
System.out.println("1- Ruta del PDF a encriptar");
System.out.println("2- Ruta del PDF destino");
System.out.println("3- Clave ");
}
}

Para crear tu propio encriptador de PDFs lo primero que tienes que hacer es descargar las librerías .jar de iText. Son algunos pasos, aquí tienes el primer .jar y después tendrás que descargar el resto con svn, aquí tienes explicado como hacerlo.

Una vez que tengas todas las librerías .jar te creas un proyecto en tu IDE y pegas el código que he puesto arriba. Después tendrás que incluir las librerías descargadas.

Teóricamente ya podrás ejecutar la aplicación que encripta PDFs, pero tendrás que pasarle los argumentos oportunos. Según el IDE de desarrollo que uses se hará una u otra forma.

Una vez construido el proyecto podrás ejecutarlo desde la linea de comandos con:
java -jar EncriptadorPDF < ruta pdf original > < ruta pdf encriptado > < clave >


Yo he usado NetBeans, porque con Eclipse al crear el .jar y ejecutarlo me marcaba errores del tipo "no encuentro la clases...", así que lo intenté con NetBeans y sin problemas. Simplemente construir el proyecto y él solo me crea el .jar con mi código fuente y un directorio lib con los .jar de itext.