(一)使用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 ...
随机推荐
- android 调试崩溃Unable to instantiate application的解决方法
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.***.plants, PID: 23100 ...
- python基础-面向对象编程之多态
面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...
- 网络编程(四)--基于udp协议的套接字、socketserver模块
一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...
- windows 桌面文件变成.link解决方案
在注册表中右键删除下面这个注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ln ...
- Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core
第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutori ...
- 第08节-开源蓝牙协议栈BTStack数据处理
本篇博客根据韦东山的视频整理所得. 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的.这个main函数做了 ...
- 排序算法-桶排序(Java)
package com.rao.sort; import java.util.*; /** * @author Srao * @className BucketSort * @date 2019/12 ...
- jdbc笔记2
private static String driver; private static String url; private static String username; private sta ...
- Jmeter函数助手—自带方法
1.${__time()}---->当前时间,一串数字格式 2.${__time(yyyy-MM-dd)}----->当前日期,年-月-日格式 3.${__time(yyyy-MM-dd ...
- Windows server 2003 粘滞键后门+提权
Windows server 2003中可以建立粘滞键与cmd的连接来绕过已经设置好的安全机制做一些事情,比如新建用户.提权 粘滞键介绍 网上查了一些资料,也没怎么说明白,不如自己试一下,大概意思就是 ...