2012-08-31 12 views
6

Sto cercando una libreria java open source che mi consenta di eseguire il rendering di singole pagine di PDF come JPG o PNG sul lato server.Conversione di pagine PDF in JPG su Java-GAE

Purtroppo non deve usare qualsiasi altro java.awt.* classi poi

  • java.awt.datatransfer.DataFlavor
  • java.awt.datatransfer.MimeType
  • java.awt.datatransfer.Transferable

Se non v'è alcun modo, un po 'di codice-frammento sarebbe fantastico .

+1

http://stackoverflow.com/questions/11513841/appengine-conversion-api-java mostra come eseguire l'API conversioni di Google. * Ma * c'è un problema. Questa API verrà rimossa a novembre. Forse puoi chiedere a Google suggerimenti per qualsiasi alternativa. – halex

+1

Sì, l'avevo visto. Ma come hai scritto tu il supporto sarà presto sospeso. Altrimenti sarebbe stato perfetto. Proverò a ottenere alcune informazioni da Google. – Bommelmutze

+0

Ciao, hai trovato qualcos'altro che fa la stessa conversione? Sto anche cercando una funzionalità simile. So che posso richiedere immagini dal pdf più piccolo di 25 Mb utilizzando Google Drive. Ma ho bisogno che funzioni per file più grandi. – DavidVdd

risposta

0

credo che icepdf potrebbe avere quello che stai cercando.

Ho utilizzato questo progetto open source qualche tempo fa per convertire i PDF caricati in immagini da utilizzare in un catalogo online.

import org.icepdf.core.exceptions.PDFException; 
import org.icepdf.core.exceptions.PDFSecurityException; 
import org.icepdf.core.pobjects.Document; 
import org.icepdf.core.pobjects.Page; 
import org.icepdf.core.util.GraphicsRenderingHints; 


public byte[][] convert(byte[] pdf, String format) { 

    Document document = new Document(); 
    try { 
     document.setByteArray(pdf, 0, pdf.length, null); 

    } catch (PDFException ex) { 
     System.out.println("Error parsing PDF document " + ex); 
    } catch (PDFSecurityException ex) { 
     System.out.println("Error encryption not supported " + ex); 
    } catch (FileNotFoundException ex) { 
     System.out.println("Error file not found " + ex); 
    } catch (IOException ex) { 
     System.out.println("Error handling PDF document " + ex); 
    } 
    byte[][] imageArray = new byte[document.getNumberOfPages()][]; 
    // save page captures to bytearray. 
    float scale = 1.75f; 
    float rotation = 0f; 

    // Paint each pages content to an image and write the image to file 
    for (int i = 0; i < document.getNumberOfPages(); i++) { 
     BufferedImage image = (BufferedImage) 
       document.getPageImage(i, 
             GraphicsRenderingHints.SCREEN, 
             Page.BOUNDARY_CROPBOX, rotation, scale); 
     try { 
      //get the picture util object 
      PictureUtilLocal pum = (PictureUtilLocal) Component 
      .getInstance("pictureUtil"); 
      //load image into util 
      pum.loadBuffered(image); 

      //write image in desired format 
      imageArray[i] = pum.imageToByteArray(format, 1f); 

      System.out.println("\t capturing page " + i); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     image.flush(); 
    } 
    // clean up resources 
    document.dispose(); 
    return imageArray; 
} 

Parola di cautela, però, ho avuto problemi con questa libreria gettando un segfault su open-JDK. ha funzionato bene su Sun's. Non so cosa farebbe su GAE. Non riesco a ricordare quale versione fosse il problema, quindi tieni a mente.

+0

qualcuno spiega il downvote per questo? – mmcrae

+0

Nessun indizio. ma mentre il loro down lo votava, l'ho eseguito in produzione negli ultimi 4 anni. Nessun problema. – natedennis

+0

per curiosità, hai usato il renderizzatore di pdf? Avevo problemi a convertire una singola pagina di PDF in PNG usando Apache PdfBox, ma il renderizzatore di file PDF sembrava risolvere il problema [facendo simile a questo post] (http://stackoverflow.com/questions/19018709/pdfrenderer-export-to- image-esportata-impreciso). Non ne ho sentito parlare molto, quindi sono preoccupato per il fatto che mi mancano alcuni problemi/svantaggi. – mmcrae

0

È possibile apache PDF box APi per questo scopo e utilizzare seguendo codice per convertire due pdf in JPG pagina per pagina.

public void convertPDFToJPG(String src,String FolderPath){ 

      try{ 
       File folder1 = new File(FolderPath+"\\"); 
       comparePDF cmp=new comparePDF(); 
       cmp.rmdir(folder1); 

      //load pdf file in the document object 
      PDDocument doc=PDDocument.load(new FileInputStream(src)); 
      //Get all pages from document and store them in a list 
      List<PDPage> pages=doc.getDocumentCatalog().getAllPages(); 
      //create iterator object so it is easy to access each page from the list 
      Iterator<PDPage> i= pages.iterator(); 
      int count=1; //count variable used to separate each image file 
      //Convert every page of the pdf document to a unique image file 
      System.out.println("Please wait..."); 
      while(i.hasNext()){ 
      PDPage page=i.next(); 
      BufferedImage bi=page.convertToImage(); 
      ImageIO.write(bi, "jpg", new File(FolderPath+"\\Page"+count+".jpg")); 
      count++; 
      } 
      System.out.println("Conversion complete"); 
      }catch(IOException ie){ie.printStackTrace();} 
      } 
+0

L'OP indica chiaramente che ha bisogno di una soluzione per il "Google App Engine" (GAE). Le attuali versioni di PDFBox sono ben note per * non * che funzionano negli ambienti GAE perché utilizzano classi AWT non presenti. – mkl

Problemi correlati