Java通过phantomjs实现html截图

功能: 实现是卡片分享的功能

开始技术选型选的是DJNativeSwing,但是windows是可以使用,发布到linux就不行了。虽然参照前辈方法进行解决,还是一直报org.eclipse.swt.SWTError:No more handles [gtk_init_check() failed]异常。在长时间未解决这个问题。只好

一、服务器安装 phantomjs 工具

    1、解压安装包phantomjs-2.1.1-linux-x86_64.tar  

    2、设置环境变量 exportPATH=/usr/local/phantomjs-2.1.1-linux-x86_64/bin:$PATH

    3、安装phantomjs相关包(图片字体)

     sudo yum install bitmap-fontsbitmap-fonts-cjk

    4、安装完成测试

        cd /usr/local/phantomjs-2.1.1-linux-x86_64/examples

        phantomjs hello.js

        查看结果是否打印:hello,world!

    5、碰到特殊字体linux上没有。需要导入字体 

            新建目录/usr/share/fonts/newfonts

            将font.zip压缩包解压到newfonts文件夹

            sudo mkfontscale

            sudo mkfontdir

            sudo fc-cache –fv

二、Java代码那块( 这边实现会在服务器生成一个本地html文件,调用phantomjs读取本地html文件进行截图)

代码只贴了部分代码,复制过去需要自行调整才能执行

private static final String EXE_COMMAND = "phantomjs";

private static final String BLANK = "  ";

/**
	 * 
	 * <p>     
	 * Description: 删除html文件/判断文件是否生成成功 返回结果是否成功
	 * </p>  
	 * @author  ---
	 * @created 2018年1月19日 上午9:54:01
	 * @param result phantomjs返回结果
	 * @param shareCardPath 生成卡片路径
	 * @param resultHtmlAddress html地址
	 * @return  boolean
	 */
private boolean handleResult(String result,String shareCardPath, String resultHtmlAddress,boolean checkFileIsCreate) {
Process process = Runtime.getRuntime().exec(PhantomjsService.EXE_COMMAND + BLANK //你的phantomjs.exe路径

					+ getExeScriptPath() + BLANK // 截图 javascript脚本的存放路径
					+ resultHtmlAddress + BLANK //你的目标url地址
					+ shareCardPath);//你的图片输出路径
			inputStream = process.getInputStream();
			reader = new BufferedReader(new InputStreamReader(inputStream));
			String result = reader.readLine();
			return handleResult(result,shareCardPath, resultHtmlAddress);

}

createArticleCard.js 代码:

var webPage = require('webpage');
var system = require('system');
var address = system.args[1];
var output = system.args[2];
var page = webPage.create();
page.viewportSize = {
	width : 750,
	height : 100
};
page.open(address, function(status) {
	if (status == "success") {
		var length = page.evaluate(function(s) {
			var div = document.getElementById("screenshot");
			var bc = div.getBoundingClientRect();
			var top = bc.top;
			var left = bc.left;
			var width = bc.width;
			var height = bc.height;
			window.scrollTo(0, 10000);// 滚动到底部
			return [ top, left, width, height ];
		});
		page.clipRect = {
			top : length[0],
			left : length[1],
			width : length[2],
			height : length[3]
		};
		page.render(output);
		console.log("success");
		phantom.exit();
	} else {
		console.log(status);
		phantom.exit(1);
	}
});


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值