Ahora presento un pequeño codigo para convertir documentos PDF a imagenes (*:JPG), para esta aplicacion, utilize las siguientes librerias:
- pdfbox-1.1.0 : Web: http://pdfbox.apache.org/download.html
- fontbox-1.1.0: La misma que la de arriba, solo hay que fijarse bien
- commons-logging-1.1.1 : Web: - http://commons.apache.org/logging/download_logging.cgi
Para continuar y ejecutar este proyecto, necesitas descargar esas librerias e instalarlas en Netbeans o en el IDe que utilices para programar, para instalar nuevas librerias a Netbeans, clic aqui.
Proyecto: Esta dividido en dos metodos y se ejecuta desde consola
Primer metodo: Este metodo convierte cada hoja del archivo PDF en imagenes con el formato JPG, recibe como parametro de entrada el "path" o sea la ruta de donde leera el archivo PDF, ejemplo: "e:/temppdf/", el segundo parametro es el "pdf", el nombre del archivo a convertir, ej: "Basilea.pdf".
/* Convierte el documento PDF a imagen con un tamaño grande*/
public void Convertir_1(String path, String pdf){
try {
PDDocument document = null;
//se carga el documento
document = PDDocument.load(new File(path + pdf));
//se obtiene el numero de paginas del PDF
int numero_paginas = document.getNumberOfPages();
System.out.println("texto: " + document.getNumberOfPages());
//Se capturan todas las paginas
List pages = document.getDocumentCatalog().getAllPages();
//un ciclo repetitivo para crear todas las imagenes
for(int i=0; i<=numero_paginas-1;i++){
System.out.println( "creando imagen - " + i);
//se obtiene la pagina "i" de n paginas
PDPage page = (PDPage)pages.get( i );
//se convierte la hoja pdf a imagen y se coloca en memoria
BufferedImage image = page.convertToImage();
// se escribe a imagen en disco
ImageIO.write(image, "jpg", new File( path + "tmp_" + i + ".jpg"));
System.out.println( "imagen [" + i + "] creada");
}
document.close();//cerramos el pdf
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
Este metodo guarda las imagenes convertidas en la misma carpeta donde esta el PDF, lee la cantidad de paginas que tiene el archivo y utilizando un ciclo FOR, va convirtiendo y guardando pagina por pagina, este metodo crea las imagenes de un tamaño grandeSegundo metodo: Este metodo convierte cada hoja del archivo PDF en imagenes con el formato JPG, pero antes obtiene el tamaño de la hoja del archivo PDF y "escala" la imagen capturada por el API, recibe como parametro de entrada el "path" o sea la ruta de donde leera el archivo PDF, ejemplo: "e:/temppdf/", el segundo parametro es el "pdf", el nombre del archivo a convertir, ej: "Basilea.pdf".
/* Convierte el documento PDF a Imagen, escalando el archivo al
tamaño de las hojas del PDF*/
public void Convertir_2(String path, String pdf){
try {
PDDocument document = null;
//se carga el documento
document = PDDocument.load(new File(path + pdf));
//se obtiene el numero de paginas del PDF
int numero_paginas = document.getNumberOfPages();
System.out.println("texto: " + document.getNumberOfPages());
//Se capturan todas las paginas
List pages = document.getDocumentCatalog().getAllPages();
//un ciclo repetitivo para crear todas las imagenes
for(int i=0; i<=numero_paginas-1;i++){
System.out.println( "creando imagen - " + i);
//se obtiene la pagina "i" de n paginas
PDPage page = (PDPage)pages.get( i );
//se convierte la hoja pdf a imagen y se coloca en memoria
BufferedImage image = page.convertToImage();
//ancho y alto de la pagina pdf
int w = (int) document.getPageFormat(i).getWidth();
int h = (int) document.getPageFormat(i).getHeight();
//se crea una nueva imagen en memoria con el tamaño de la hoja pdf
BufferedImage escala = new BufferedImage(w,h, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = escala.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//se añade la imagen
graphics2D.drawImage(image, 0, 0, w, h, null);
// se escribe a imagen en disco
ImageIO.write(escala, "jpg", new File( path + "tmp_e" + i + ".jpg"));
System.out.println( "imagen [" + i + "] creada");
}
document.close();//cerramos el pdf
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
Al igual que el primer metodo, utiliza un ciclo FOR para recorrer todo el documento.
Con unos cuantos cambios al codigo, puede convertirse el archivo PDF a cualquier tamaño, por ejemplo:
El codigo mas ejemplos en el siguiente enlace