2010-10-18 15 views
5

Czy ktoś wie, jak to zrobić? Próbowałem z JEditorPane, ale to nie działa? Każdy inny pomysł?Jak przekonwertować kod HTML witryny na obraz?

Z góry dziękuję.

Jest to kod używam:

import java.awt.Dimension; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 

import javax.imageio.ImageIO; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class HtmlToImage 
    { 

     protected static File generateOutput() throws Exception 
     { 
      // Create a temporary output file for the PNG image. 
      File outputFile = new File("Reporte.png"); 
      outputFile.deleteOnExit(); 

      JEditorPane pane = new JEditorPane(); 
      pane.setContentType("text/html"); 
      pane.setPage("http://www.google.com"); 
      final JFrame frame = new JFrame(); 
      frame.pack(); 

      // Time Delay for the correct loading of the file. 
      try 
      { 
       Thread.sleep(5000); 
      } 
      catch(NumberFormatException nfe) 
      { 
      } 

      frame.add(pane); 
      frame.pack(); 

      Dimension prefSize = pane.getPreferredSize(); 
      pane.setSize(prefSize); 

      BufferedImage img = new BufferedImage( prefSize.width, prefSize.height, 
                BufferedImage.TYPE_INT_RGB); 
      Graphics2D g = (Graphics2D) img.getGraphics(); 

      SwingUtilities.paintComponent(g, pane, frame, 0, 0, prefSize.width, prefSize.height); 

      ImageIO.write(img, "png", outputFile); 

      return outputFile; 
     } 

     public static void main(String[] args) 
     { 
      try 
      {    
       generateOutput(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 

    } 
+0

jak to nie działa? – Bozho

+1

Wyobrażam sobie, ponieważ JEditorPane jest komponentem Swing i nie ma nic wspólnego z HTMLem. –

+0

Hej @Bozho, dzięki za odpowiedź. Problemem jest wynikowy obraz, jest całkowicie zniekształcony. – hernangarcia

Odpowiedz

3

Trzeba uczynić HTML i wyjścia, wynik w postaci pliku obrazu. Obecnie w rdzeniu Java nie ma pełnoprawnego mechanizmu renderowania HTML, więc na przykład potrzebna jest osobna biblioteka lub aplikacja, np. WebRenderer. Wystarczy wywołać go z filtru serwletów i zastąpić odpowiedź wynikami renderowania.

Edit Open source alternatywa WebRenderer jest Cobra

+0

Dzięki @Saul Buduję aplikację opensourced, więc chciałbym użyć opensourced tools/libs. – hernangarcia

+0

Moduł HTMLEditorKit Swinga zapewnia renderowanie HTML (aczkolwiek prymitywne). http://download.oracle.com/javase/6/docs/api/javax/swing/text/html/HTMLEditorKit.html – dogbane

+0

@dogbane: HTMLEditorKit obsługuje tylko bardzo minimalny zestaw funkcjonalności wykorzystywanych przez nowoczesne witryny. To nie jest pełnowartościowy silnik renderujący WWW. – Saul

1

Można spróbować użyć JEditorPane następująco:

//load the webpage into the editor 
JEditorPane ed = new JEditorPane(new URL("http://www.google.com")); 
ed.setSize(200,200); 

//create a new image 
BufferedImage image = new BufferedImage(ed.getWidth(), ed.getHeight(), 
             BufferedImage.TYPE_INT_ARGB); 

//paint the editor onto the image 
SwingUtilities.paintComponent(image.createGraphics(), 
           ed, 
           new JPanel(), 
           0, 0, image.getWidth(), image.getHeight()); 

//save the image to file 
ImageIO.write((RenderedImage)image, "png", new File("google.png")); 
+0

Ekran jest pusty, w kolorze białym. –

-1

Można również użyć Html2Image Java API od Google.

Powiązane problemy