使用 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 字符,则图像没有以正确的内容呈现(字符如下方框所示)。
但是实际的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">サポーター&フレンズ</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 编码。如何解决这个问题。
请帮忙。
最佳答案
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\">サポーター&フレンズ</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.
关于java - 使用 Flying Saucer 将html转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449519/