2010-05-16 15 views
24

Sto cercando una libreria Java che possa prendere un PDF e creare un'immagine in miniatura (PNG) dalla prima pagina.Creare l'immagine di anteprima per PDF in Java

Ho già guardato JPedal, ma la sua pazza tassa di licenza è completamente proibitiva. Sto usando iText per manipolare i file PDF al momento, ma credo che non faccia la generazione delle miniature. Posso usare qualcosa come Ghostscript sulla riga di comando, ma spero di mantenere il mio progetto all-Java se possibile.

+0

Vedere se [jPod] (http://sourceforge.net/projects/jpodlib/) può farlo, scommetto che può farlo. (Non è una risposta, in quanto è solo un suggerimento.) – doublep

+0

Guardando a jPod ora. Preferirei una soluzione open source, se possibile, immagino. Anche 99 euro sono troppo da spendere se posso evitarlo. Impossibile trovare facilmente un'API per questo. –

+0

Beh, hmm, l'ultima volta che ho scaricato jPod era gratis. Immagino di dover controllare cosa è successo ... – doublep

risposta

21

PDF Renderer è un LGPL licenza libreria di pura-java che rende questo il più semplice (tratto dal loro pagina di esempio):

File file = new File("test.pdf"); 
RandomAccessFile raf = new RandomAccessFile(file, "r"); 
FileChannel channel = raf.getChannel(); 
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 
PDFFile pdffile = new PDFFile(buf); 

// draw the first page to an image 
PDFPage page = pdffile.getPage(0); 

//get the width and height for the doc at the default zoom 
Rectangle rect = new Rectangle(0,0, 
       (int)page.getBBox().getWidth(), 
       (int)page.getBBox().getHeight()); 

//generate the image 
Image img = page.getImage(
       rect.width, rect.height, //width & height 
       rect, // clip rect 
       null, // null for the ImageObserver 
       true, // fill background with white 
       true // block until drawing is done 
       ); 
+0

Wow, sembra decisamente quello di cui ho bisogno. Darò un tentativo e riferire. –

+0

Come posso salvare questo oggetto Image su disco? –

+1

'ImageIO.write (immagine," png ", file);' – FRotthowe

5

PDF Renderer va bene fino a quando si utilizza solo il sottoinsieme di file PDF che uso. Con JPod e JPedal paghi una biblioteca attiva e sviluppata, non un progetto morto.

+0

La mia soluzione deve funzionare con file PDF arbitrari. Puoi spiegare di più con "solo il sottoinsieme [PDF Render] utilizza"? Ri: JPedal, l'ho già respinto a causa del suo costo ridicolo; ri: JPod, non sono ancora sicuro se farà ciò di cui ho bisogno sopra. –

+0

PDF Renderer non supporta gli oggetti compressi e una serie di altre funzionalità in un numero elevato di PDF correnti. –

+0

+1 grazie per l'heads up –

Problemi correlati