2012-08-31 29 views
6

Szukam biblioteki Java typu open-source, która umożliwia renderowanie pojedynczych stron plików PDF jako JPG lub PNG po stronie serwera.Konwersja stron PDF na JPG na Java-GAE

Niestety to nie musi stosować żadnych innych java.awt.* klas następnie

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

Jeśli istnieje jakikolwiek sposób, trochę fragment kodu byłoby fantastyczne .

+1

http://stackoverflow.com/questions/11513841/appengine-conversion-api-java pokazuje, jak to zrobić za pomocą api konwersji Google. * Ale * jest jeden problem. Ten interfejs API zostanie usunięty w listopadzie. Może możesz poprosić Google o wskazówki na temat jakiejkolwiek alternatywy. – halex

+1

Tak, widziałem to. Ale jak napisałeś, wsparcie zostanie wkrótce przerwane. W przeciwnym razie byłby idealny. Postaram się uzyskać informacje z google. – Bommelmutze

+0

Witam, czy znalazłeś coś, co robi tę samą konwersję? Poszukuję również podobnej funkcjonalności. Wiem, że mogę poprosić o obrazy z plików PDF mniejszych niż 25 MB za pomocą dysku google. Ale potrzebuję go do pracy przy większych plikach. – DavidVdd

Odpowiedz

0

Wierzę, że icepdf może mieć to, czego szukasz.

Użyłem tego projektu open source, aby zamienić przesłane pliki PDF na obrazy do wykorzystania w katalogu 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; 
} 

Słowo ostrzeżenia jednak, miałem problemy z tą biblioteką, rzucając SegFault na open-jdk. pracował dobrze na Sun's. Nie jestem pewien, co by to zrobiło na GAE. Nie pamiętam, jaką wersję miał problem, więc po prostu bądź świadomy.

+0

ktoś wytłumaczy, co to jest? – mmcrae

+0

Nie ma pojęcia. ale podczas ich głosowania w dół, prowadzę go w produkcji przez ostatnie 4 lata. Żadnych problemów. – natedennis

+0

z ciekawości, czy użyłeś narzędzia do renderowania pdf? Miałem problemy z konwersją pojedynczej strony pliku PDF na PNG za pomocą Apache PdfBox, ale program do renderowania pdf najwyraźniej naprawiał go [robi się podobny do tego posta] (http://stackoverflow.com/questions/19018709/pdfrenderer-export-to- nieprawidłowo wyeksportowany obraz). Nie słyszę, jak dużo o tym mówiłem, więc obawiam się, że brakuje mi pewnych problemów/wad. – mmcrae

0

Możesz użyć apache PDF box APi do tego celu i użyć poniższego kodu, aby przekonwertować dwa pliki pdf na stronę JPG po stronie.

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

OP wyraźnie wskazał, że potrzebuje rozwiązania dla "Google App Engine" (GAE). Obecne wydania PDFBox są dobrze znane z tego, że * nie * pracują w środowiskach GAE, ponieważ używają tam nieobecnych klas AWT. – mkl