使用飞碟将html转换为Image

时间:2015-09-08 04:57:01

标签: java html5 flying-saucer

使用飞碟,我使用以下代码成功将html转换为图像

//doc - html source code as org.w3c.dom.Document

Java2DRenderer renderer = new Java2DRenderer(doc, width, height); 

         BufferedImage img = renderer.getImage();

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(img, "jpg", os);

但我在上面的代码中遇到问题,就好像它没有在html中正确呈现字体。

此外,如果给出中文,日文或非Ascii字符,则图像未使用适当的内容进行渲染(字符的框如下所示)。

enter image description here

但实际的html内容是

<div ><ul><li><dl><dt><a href="http://jcs2014.com/ja/about/">イベントについて</a><br></dt><dd><ul><li><a href="http://jcs2014.com/ja/about/support.html">サポーター&amp;フレンズ</a><br></li></ul></dd></dl><dl><dt><a href="http://jcs2014.com/ja/event/">イベント・セミナー一覧</a><br></dt></dl></li></ul><div><br></div></div>

同样在我的情况下,任何语言都将出现,但所有语言都使用unicode进行编码。怎么解决这个问题。

请帮忙。

1 个答案:

答案 0 :(得分:0)

    String html = "<div ><ul><li><dl><dt><a href=\"http://jcs2014.com/ja/about/\">イベントについて</a><br></dt><dd><ul><li><a href=\"http://jcs2014.com/ja/about/support.html\">サポーター&amp;フレンズ</a><br></li></ul></dd></dl><dl><dt><a href=\"http://jcs2014.com/ja/event/\">イベント・セミナー一覧</a><br></dt></dl></li></ul><div><br></div></div>"

    //Read it using Utf-8 - Based on encoding, change the encoding name if you know it

    InputStream htmlStream = new ByteArrayInputStream(html.getBytes("UTF-8"));  
    Tidy tidy = new Tidy();      
    org.w3c.dom.Document doc = tidy.parseDOM(new InputStreamReader(htmlStream,"UTF-8"), null);

    Java2DRenderer renderer = new Java2DRenderer(doc, width, height); 
    BufferedImage img = renderer.getImage();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(img, "jpg", os);

This solves my issue. On reading html stream using UTF-8 solves the issue.