将html转换为字节数组java中的图像

时间:2010-12-14 09:46:42

标签: java html image renderer layout-engine

如何轻松地将html转换为图像,然后转换为字节数组而不创建它

感谢

4 个答案:

答案 0 :(得分:13)

如果您没有任何复杂的html,可以使用普通JLabel进行渲染。下面的代码将生成此图像:

<html>
  <h1>:)</h1>
  Hello World!<br>
  <img src="http://img0.gmodules.com/ig/images/igoogle_logo_sm.png">
</html>

alt text

public static void main(String... args) throws IOException {

    String html = "<html>" +
            "<h1>:)</h1>" +
            "Hello World!<br>" +
            "<img src=\"http://img0.gmodules.com/ig/images/igoogle_logo_sm.png\">" +
            "</html>";

    JLabel label = new JLabel(html);
    label.setSize(200, 120);

    BufferedImage image = new BufferedImage(
            label.getWidth(), label.getHeight(), 
            BufferedImage.TYPE_INT_ARGB);

    {
        // paint the html to an image
        Graphics g = image.getGraphics();
        g.setColor(Color.BLACK);
        label.paint(g);
        g.dispose();
    }

    // get the byte array of the image (as jpeg)
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(image, "jpg", baos);
    byte[] bytes = baos.toByteArray();

    ....
}

如果您想将其写入文件:

    ImageIO.write(image, "png", new File("test.png"));

答案 1 :(得分:4)

我认为你可以使用这个库

html2image-0.9.jar

您可以在此页面下载此库:http://code.google.com/p/java-html2image/

答案 2 :(得分:3)

在上面的代码中使用内存ByteArrayStream而不是FileOutputStream怎么样?那将是一个字节数组,至少......

答案 3 :(得分:0)

这非常重要,因为渲染HTML页面可能非常复杂:您可以使用文本,图像,CSS,甚至可以评估JavaScript。

我不知道答案,但我确实有一些可能对你有帮助的东西:用于将HTML页面转换为PDF文件的iText(PDF书写库)代码。

public static final void convert(final File xhtmlFile, final File pdfFile) throws IOException, DocumentException
{
    final String xhtmlUrl = xhtmlFile.toURI().toURL().toString();
    final OutputStream reportPdfStream = new FileOutputStream(pdfFile);
    final ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(xhtmlUrl);
    renderer.layout();
    renderer.createPDF(reportPdfStream);
    reportPdfStream.close();
}