(一)使用phantomjs将动态HTML页面生成图片
因为工作需要,笔者需要将一个动态的HTML5页面生成图片,并将图片发送给用户。
其中难点在于怎样将动态H5生成图片
笔者翻阅资料后,决定使用phantomjs这个插件,关于这个插件的安装,非常简单,笔者不再赘述。
安装好插件后就是怎样使用这个插件了。
下面附上笔者的调用
private void exePhantomjs(String url,String filename){
String BLANK = " ";
Process process = null;
try {
process = Runtime.getRuntime().exec(
phantomjs + BLANK //你的phantomjs.exe路径
+ calendarjs + BLANK //就是上文中那段javascript脚本的存放路径
+ url + BLANK //你的目标url地址
+ filePath+filename+".jpg");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info(phantomjs + BLANK+calendarjs + BLANK+url + BLANK+filePath+filename+".jpg");
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String tmp = "";
try {
while ((tmp = reader.readLine()) != null) {
if (process != null) {
process.destroy();
process = null;
}
}
inputStream.close();
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("渲染成功...");
}
这里相当是JAVA直接调用第三方插件。需要传入四个参数
1,phantomjs的路径
2,执行脚本
3,动态H5的地址,可以使用百度地址进行测试,笔者在开发时使用了自己后台的H5页面
4,图片生成路径
接下来附上笔者的脚本
var page = require('webpage').create(), system = require('system'), address, output, size;
if (system.args.length < || system.args.length > ) {
phantom.exit();
} else {
address = system.args[];
output = system.args[];
//定义宽高
page.viewportSize = {
width : ,
height :
};
page.open(address, function(status) {
var bb = page.evaluate(function() {
return document.getElementsByTagName('html')[].getBoundingClientRect();
});
var cc = page.evaluate(function() {
return document.documentElement;
});
page.clipRect = {
top : bb.top,
left : bb.left,
width : bb.width,
height : cc.scrollHeight
};
window.setTimeout(function() {
page.render(output);
page.close();
console.log('success...');
//for (var item in cc){
// if('scrollHeight'==item){
// console.log(item,cc[item])
// }
//}
console.log('height',cc.scrollHeight)
phantom.exit();
}, );
});
}
整个过程比较简单,但是从技术选型,到开发,调试也历时一个星期。
最后附上笔者生成的图片

(一)使用phantomjs将动态HTML页面生成图片的更多相关文章
- 爬虫动态渲染页面爬取之selenium驱动chrome浏览器的使用
Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,可以用其进行网页动态渲染页面的爬取. 支持的浏览器包括IE(7, 8, 9, 10 ...
- jquery动态创建页面元素
jquery用$()方法动态创建一个页面元素,例如: var $div=$("<div title='动态创建页面元素'>欢迎创建一个新的div</div>" ...
- JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...
- httl开源JAVA模板引擎,动态HTML页面输出
HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. ...
- 基于Vue的SPA动态修改页面title的方法
最近基于VUE做个SPA手机端web发现动态修改页面标题通过document.title=xxxx 来修改着实蛋疼,而且在IOS的微信端据说没效果.百度发现要针对IOS的微信做点额外的操作,即:创建一 ...
- js、css动态压缩页面代码
1.js.css动态压缩页面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...
- 微信小程序中把页面生成图片
这个问题我上网搜了一下,答案有多种,但是真正能用的没有几何.很多答案都是雷同,有的网友也不负责任,直接拿来照抄,自己也不跑一遍看看.哎,不说了,说多了全是泪.希望我们的技术达人在分享的时候,能够真实的 ...
- 微信小程序——动态渲染页面、路径传参
1.动态渲染页面.改变css.样式必须setData渲染过去 this.setData({ userInfo: app.globalData.userInfo, token: app.glob ...
- 动态为页面添加CSS样式文件引用
动态为页面添加CSS样式文件引用: if (document.createStyleSheet) { //IE document.createStyleSheet("./Themes/Def ...
随机推荐
- 英语cabardine麝香cabardine单词
麝香(cabardine)是麝科动物林麝Moschus berezovskii Flerov. 马麝M. sifanicusPrzewalski或原麝M.moschiferus L.雄体香囊中的干燥分 ...
- android 实时获取网速
public class NetSpeed { private static final String TAG = NetSpeed.class.getSimpleName(); private lo ...
- jQuery Validate验证框架详解,提交前验证
现在都用h5表单进行验证了,以下方式仅做回忆 https://www.runoob.com/jquery/jquery-plugin-validate.html <!DOCTYPE HTML P ...
- javascript之DOM(二Document对象)
javascript通过Document类型来表示文档.在浏览器中document是HTMLDocument对象(继承自Document)的一个实例,表示整个html页面.而且在浏览器中documen ...
- centos7安装docker-compose报错解决办法
docker-compose是 docker 容器的一种单机编排服务,docker-compose 是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,当在宿主机启动较多的容器时候,如果都是 ...
- 重新编译kubeadm,修改默认证书时间
参考 kubeadm alpha certs renew Kubeadm1.14 证书调整 kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新. 1. 重新 ...
- Kth Minimum Clique(2019年牛客多校第二场D题+k小团+bitset)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 找第\(k\)小团. 思路 用\(bitset\)来标记每个结点与哪些结点直接有边,然后进行\(bfs\),在判断新加入的点与现在有的点是否都 ...
- FastDFS 分布式文件系统(部署和运维)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/KamRoseLee/article/det ...
- Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging
1665 - Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT a ...
- NetworkManager需要与不需要
需要: 1.nmcli配置网络 不需要: 1. ifcfg-eth1:0(网卡的子接口配置文件)生效