Ho un problema con il seguente codice: Dovrebbe teoricamente prendere un file in formato PDF nel path specificato e poi salvarmelo come immagine in un'altro path specificato, solo che quando faccio RUN (con Eclipse) e gli dico JavaApplication, mi apre una finestra con scritto : Select Java Apllication Select Type... Select Item (con una lista di vari Item)
E qui mi blocco non sapendo come procedere... So che è una domanda stupida, ma cosa devo fare?
codice:
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
public class ProvaPdf {
public static BufferedImage[] getImgFromPDF(File pdf) {
// Dichiaro l'array di immagini che dovrò ritornare
BufferedImage[] immagini = null;
try {
// Faccio l'accesso al file pdf da elaborare
RandomAccessFile raf = new RandomAccessFile(pdf, "r");
// A questo punto per poter utilizzare la classe PDFFile di
// com.sun.pdfview dovrò creare un buffer in memoria
// che in genere, per questa libreria viene creato dal FileChannel
FileChannel channel = raf.getChannel();
// Mappandolo in un buffer il suo contenuto,
// FileChannel.MapMode.READ_ONLY serve per impedire che in qualche
// modo l'origine venga modificata
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
// Istanzio la classe PDFFile che rappresenta il mio PDF
PDFFile pdffile = new PDFFile(buf);
// Mi facio restituire il numero delle pagine
int num = pdffile.getNumPages();
// Creo l'array delle immagini
immagini = new BufferedImage[num];
// Riprendo un'immagine per volta
for (int i = 0; i < num; i++) {
// La metto nell'oggetto PDFPage
PDFPage page = pdffile.getPage(i);
// Prendo le dimenzioni allo zoom di default del pdf
int width = (int) page.getBBox().getWidth();
int height = (int) page.getBBox().getHeight();
// Creo un rettangolo uguale alla pagina
Rectangle rect = new Rectangle(0, 0, width, height);
// Prendo la rotazione della pagina e se è impostata a 90 o 270,
// quindi girata in verticale
int rotation = page.getRotation();
Rectangle rectRotato = rect;
if (rotation == 90 || rotation == 270) {
// Mi creo un'altro rettangolo con le dimensioni invertite,
// se invece non entro in questo in i due rettangoli sono
// uguali
rectRotato = new Rectangle(0, 0, rect.height, rect.width);
}
// genero l'immagine con il metodo getImage di PDFPage
BufferedImage img = (BufferedImage) page.getImage(rect.width, rect.height, // width
// &
// height
rectRotato, // clip rect
null, // null per l'ImageObserver
true, // setto lo sfondo bianco, false lo avrebbe fatto
// trasparente
true // attendo fino a quando l'immagine non è stata
// creata prima di proseguire
);
// Setto nella posizione corrente l'immagine creata
immagini[i] = img;
}
} catch (FileNotFoundException ex) {
System.err.println(ex.getLocalizedMessage());
} catch (IOException ex) {
System.err.println(ex.getLocalizedMessage());
}
return immagini;
}
public static void main() {
File filePdf = new File("D:\\Documenti\\Download\\1.3.6.1.4.1.21367.2005.3.9999.758111111111803 (1).pdf");
BufferedImage[] buffImg = getImgFromPDF(filePdf);
int i=0;
try {
ImageIO.write(buffImg[0], "png", new File("C:\\" + i + "_.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}