2010-10-18 5 views
5

Est-ce que quelqu'un sait comment faire cela? J'ai essayé avec JEditorPane mais ça ne marche pas? Une autre idée?Comment convertir le HTML d'un site internet vers une image?

Merci d'avance.

Ce code J'utilise:

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

comment cela ne fonctionne pas? – Bozho

+1

J'imagine que JEditorPane est un composant Swing et n'a rien à voir avec le HTML. –

+0

Hey @Bozho, merci pour la réponse. Le problème est l'image résultante, elle est totalement mal formée. – hernangarcia

Répondre

3

Vous devez rendre le code HTML et sortie le résultat comme un fichier image. Actuellement, il n'y a pas de moteur de rendu HTML à part entière dans le Java de base, donc vous aurez besoin d'une bibliothèque séparée ou d'une application, par exemple WebRenderer. Appelez-le simplement à partir d'un filtre de servlet et remplacez la réponse par des résultats de rendu.

Modifier Ouvrir source alternative à WebRenderer est Cobra

+0

Merci @Saul Je construis une application opensourced donc je voudrais utiliser des outils/libs opensourced. – hernangarcia

+0

HTMLEditorKit de Swing fournit un rendu HTML (bien que primitif). http://download.oracle.com/javase/6/docs/api/javax/swing/text/html/HTMLEditorKit.html – dogbane

+0

@dogbane: HTMLEditorKit ne prend en charge qu'un ensemble minimal de fonctionnalités que les sites Web modernes utilisent. Ce n'est pas un moteur de rendu Web à part entière. – Saul

1

Vous pouvez essayer d'utiliser un JEditorPane comme suit:

//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

L'écran est vide, de couleur blanche. –

-1

Vous pouvez également utiliser Html2Image API java de Google.

Questions connexes