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(); } } }

Rispondi quotando