2012-08-31 18 views
6

Estoy buscando una biblioteca Java de código abierto que me permita representar páginas únicas de archivos PDF como JPG o PNG en el lado del servidor.Conversión de páginas PDF a JPG en Java-GAE

Por desgracia, no hay que utilizar cualquier otro java.awt.* clases luego

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

Si hay alguna manera, un poco de código fragmento sería fantástico .

+1

http://stackoverflow.com/questions/11513841/appengine-conversion-api-java muestra cómo hacerlo con la aplicación Google conversiones. *Pero hay un problema. Esta api se eliminará en noviembre. Tal vez pueda pedirle consejos a Google sobre cualquier alternativa. – halex

+1

Sí, lo había visto. Pero como usted escribió, el soporte pronto se descontinuará. De lo contrario, hubiera sido perfecto. Trataré de obtener información de google. – Bommelmutze

+0

Hola, ¿encontró algo más que haga la misma conversión? También estoy buscando una funcionalidad similar. Sé que puedo solicitar imágenes de archivos PDF de menos de 25 Mb con Google Drive. Pero necesito que funcione para archivos más grandes. – DavidVdd

Respuesta

0

creo que icepdf podría tener lo que está buscando.

He utilizado este proyecto de código abierto hace un tiempo para convertir archivos PDF cargados en imágenes para su uso en un catálogo en línea.

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

palabra de precaución sin embargo, he tenido problemas con esta biblioteca de lanzar una violación de segmento en el JDK abierta. funcionó bien en Sun's. No estoy seguro de qué haría en GAE. No recuerdo qué versión tenía el problema, así que ten en cuenta.

+0

alguien explica el voto a favor de esto? – mmcrae

+0

No hay pista. pero mientras ellos lo votan, lo he estado produciendo durante los últimos 4 años. Sin problemas en absoluto. – natedennis

+0

por curiosidad, ¿has usado pdf-renderer? Estaba teniendo problemas para convertir una sola página de PDF a PNG usando Apache PdfBox, pero el pdf-renderer parecía arreglarlo [haciendo algo similar a esta publicación] (http://stackoverflow.com/questions/19018709/pdfrenderer-export-to- imagen-exportada-incorrectamente). No lo escuché hablar mucho, así que estoy preocupado de que me faltan algunos problemas/desventajas. – mmcrae

0

Puede apache PDF box APi para este fin y utilizar el código siguiente para convertir dos pdfs en JPG página por página.

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

El OP indica claramente que necesita una solución para el "Google App Engine" (GAE). Las versiones actuales de PDFBox son conocidas por * no * que funcionan en entornos GAE porque usan clases AWT que no están presentes allí. – mkl