Java图片处理:网页转图片(HtmlToImage)

Java图片处理:网页转图片


需求来源于前端同事跟我反馈整天调试布局样式很难受,希望能有服务端网页转图片的方法。 记录一下研究过程。

  • 可选方案及评价。
  • 最终选取的方案
  • 代码细节
  • 不足之处

可选方案及评价

从以下三个方面考虑:

  • 页面效果还原程度
  • 是否支持复杂html/js解析
  • 中文字体显示效果

JEditorPane

首先找到的方案是使用java内置的Html解释工具javax.swing.JEditorPane。

public void testHtml2Image() throws Exception
	{
   
		String html = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>贝叶斯统计推断</title></head><body><article class=\"markdown-body\"><h1id=\"gps\"><a name=\"user-content-gps\"href=\"#gps\"class=\"headeranchor-link\"aria-hidden=\"true\"><spanclass=\"headeranchor\"></span></a>贝叶斯统计推断</h1><p>最大后验概率MAP</p><p>最小均方误差LMS</p><blockquote><p>1.最大后验概率是在观测条件x下,寻求待估量最可能的值作为估计值,即最大后验概率时的值。<br/>2.最小均方误差是在观测条件x下,以待估量的均值作为估计值。<br/></p></blockquote></article>";
		JEditorPane editPane = new JEditorPane("text/html", html);
		editPane.setEditable(false);
		Dimension prefSize = editPane.getPreferredSize();
		BufferedImage img = new BufferedImage(prefSize.width,prefSize.height, BufferedImage.TYPE_INT_ARGB);
		Graphics graphics = img.getGraphics();
		editPane.setSize(prefSize);
		editPane.paint(graphics);
		graphics.dispose();
		ImageIO.write(img, "png",  new File("/Users/yourname/Documents/work/temp/20190219.png"));
	}

这是最简单的HTML代码了,但显示效果却不太好,如下图所示:
在这里插入图片描述
而且多尝试后发现JeditorPane解析稍微复杂一点的js页面就会出错。

html2image

这是百度来的,从maven上可以搜索到,下载之后发现其内部就是调用JEditorPane,只是作了简单的封装,同样不满意。

wkhtmltox

这是在StackOverFlow上搜索Html2Image时看到的一种方案。尝试以后,效果强于JEditorPane,考虑试用。如谷歌首页转化如下:

最终选取方案

wkhtmltox在三个方面均强于JEditorPane。wkhtmltox没有java版本,采用java代码调用linux命令的方式使用该工具包。
wkhtmltox分为wkhtmltoimage 和wkhtmltopdf,经过尝试wkhtmltoimage显示效果不太好,且可调参数较少。而wkhtmltopdf转化效果相当好,因此最终解决方案:

Created with Raphaël 2.2.0 html字符 pdf
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值