hernangarcia
hernangarcia

Reputation: 584

How to convert HTML of a website to an image?

Does anyone know how to do this? I've tried with JEditorPane but it does not work? Any other idea?

Thanks in advance.

This is the code I'm using:

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

    }

Upvotes: 8

Views: 30182

Answers (3)

Saul
Saul

Reputation: 18071

You need to render the HTML and output the result as a picture file. Currently there is no full-fledged HTML renderer in core Java so you'll need a separate library or an application, WebRenderer for example. Simply invoke it from a servlet filter and override the response with rendering results.

Edit Open source alternative to WebRenderer is Cobra

Upvotes: 3

deepak.prathapani
deepak.prathapani

Reputation: 373

You can also use Html2Image java API from Google.

Upvotes: -3

dogbane
dogbane

Reputation: 274838

You could try using a JEditorPane as follows:

//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"));

Upvotes: 1

Related Questions