公司最近有个需求:把用户第一次的测量身体信息和最近一次测量信息进行对比,并且需要把对比的数据截成图片可以发给用户(需要在不打开网页的情况下实时对网页进行截图然后保存到服务器上,返回图片地址),通过网上的一些文章可以发现有以下几种实现方式:参考文章https://blog.csdn.net/wanglq0086/article/details/60761614

  • Robot
  • 利用JNI,调用第三方C/C++组件
  • DJNativeSwing组件
  • 利用html2canvas
  • 利用html2image
  • phantomJs

通过对比效果决定使用phantomJs,PlantomJs是一个基于javascript的webkit内核无头浏览器 也就是没有显示界面的浏览器,你可以在基于 webkit 浏览器做的事情,它都能做到。PlantomJs提供了如 CSS 选择器、DOM操作、JSON、HTML5、Canvas、SVG 等。PhantomJS 的用处很广泛,如网络监控、网页截屏、页面访问自动化、无需浏览器的 Web 测试等,这里只用到网页截屏。PlantomJs可以通过官网下载http://phantomjs.org/download.html,也可以通过(只有windows版本):https://pan.baidu.com/s/1EVX1RPX7gY0rGvEI6OHcwg 密码:brb4 下载;解压后可以看到

负责截图脚本examples文件夹下rasterize.js如下:

var page = require('webpage').create(),system = require('system'),address, output, size;if (system.args.length < 3 || system.args.length > 5) {phantom.exit(1);
} else {address = system.args[1];//传入url地址output = system.args[2];//输出图片的地址page.viewportSize = { width: 800, height: 1800 };//自定义定义宽高if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {size = system.args[3].split('*');page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }: { format: system.args[3], orientation: 'portrait', margin: '1cm' };} else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {size = system.args[3].split('*');if (size.length === 2) {pageWidth = parseInt(size[0], 10);pageHeight = parseInt(size[1], 10);page.viewportSize = { width: pageWidth, height: pageHeight };page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };} else {console.log("size:", system.args[3]);pageWidth = parseInt(system.args[3], 10);pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as anyconsole.log ("pageHeight:",pageHeight);page.viewportSize = { width: pageWidth, height: pageHeight };}}if (system.args.length > 4) {page.zoomFactor = system.args[4];}page.open(address, function (status) {if (status !== 'success') {console.log('Unable to load the address!');phantom.exit(1);} else {window.setTimeout(function () {page.render(output);phantom.exit();}, 200);}});
}

address = system.args[1];//传入url地址

output = system.args[2];//输出图片的地址
page.viewportSize = { width: 800, height: 1800 };//自定义定义宽高
 

编写Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** @Description:根据网页地址转换成图片* @Author: admin* @CreateDate: 2018年6月22日*/
public class PhantomTools {private static String tempPath = "D:/temp/img";// 图片保存目录private static String BLANK = " ";// 下面内容可以在配置文件中配置private static String binPath = "D:/tooles/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs.exe";// 插件引入地址private static String jsPath = "D:/tooles/phantomjs/phantomjs-2.1.1-windows/examples/rasterize.js";// js引入地址// 执行cmd命令public static String cmd(String imgagePath, String url) {return binPath + BLANK + jsPath + BLANK + url + BLANK + imgagePath;}//关闭命令public static void close(Process process, BufferedReader bufferedReader) throws IOException {if (bufferedReader != null) {bufferedReader.close();}if (process != null) {process.destroy();process = null;}}/*** @param userId * @param url* @throws IOException */public static void printUrlScreen2jpg(String url) throws IOException{String imgagePath = tempPath+"/"+System.currentTimeMillis()+".png";//图片路径//Java中使用Runtime和Process类运行外部程序Process process = Runtime.getRuntime().exec(cmd(imgagePath,url));InputStream inputStream = process.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String tmp = "";while ((tmp = reader.readLine()) != null) {close(process,reader);}System.out.println("success");}public static void main(String[] args) throws IOException {String url = "https://www.baidu.com/";//以百度网站首页为例
        PhantomTools.printUrlScreen2jpg(url);}
}

截图效果,宽度和高度可以根据自己的需求在js里面调整

转载于:https://www.cnblogs.com/han108/p/9216583.html

Java实现网页截屏功能(基于phantomJs)相关推荐

  1. Java实现网页截屏功能(图片下载功能)的几种方式(整理)

    最近的项目中,需要实现一个将网页中显示的内容导出为图片的功能,故研究了一下可以实现这个功能的各种方式,整理在此,以供以后使用. p.s. 本人为java研发,所有涉及的代码,实现方式均为java的方式 ...

  2. java网页截图_Java实现的简单网页截屏功能示例

    本文实例讲述了Java实现的简单网页截屏功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.AWTException; import java.a ...

  3. java 截图_Java实现网页截屏

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.awt.AWTException; import java.awt ...

  4. android4.3 截屏功能的尝试与失败分析

    感谢网友cjd6568358的帮助,新版的Android系统截屏功能已经实现,需要的朋友请移步项目主页:https://github.com/Android-ScreenShot/AndroidScr ...

  5. Java实现屏幕截屏

    Java实现屏幕截屏功能 程序运行后的截图: 先测试一下功能: 截图过程对界面的捕捉: 双击保存后的显示界面: 后续的步骤就自己去尝试吧,这里给出了简单的测试过程. 程序结构: 代码部分显示: Cap ...

  6. 利用PhantomJS进行网页截屏,完美解决截取高度的问题

    利用PhantomJS进行网页截屏,完美解决截取高度的问题 参考文章: (1)利用PhantomJS进行网页截屏,完美解决截取高度的问题 (2)https://www.cnblogs.com/jaso ...

  7. JavaScript实现网页截屏方法总结

    " 关注『前端开发博客』公众号,回复 加群 " 最近研究了下如何利用JavaScript实现网页截屏,包括在浏览器运行的JS,以及在后台运行的nodeJs的方法.主要看了以下几个: ...

  8. JavaScript 实现网页截屏五种方法

    JavaScript 实现网页截屏五种方法 最近研究了下如何利用JavaScript实现网页截屏,包括在浏览器运行的JS,以及在后台运行的nodeJs的方法.主要看了以下几个: PhantomJS P ...

  9. JS 实现网页截屏五种方法

    最近研究了下如何利用JavaScript实现网页截屏,包括在浏览器运行的JS,以及在后台运行的nodeJs的方法.主要看了以下几个: PhantomJS Puppeteer(chrome headle ...

最新文章

  1. 网红咖啡店的最后一晚:五道口的罗曼蒂克如何消亡
  2. python get 下载 目录_python实现支持目录FTP上传下载文件的方法
  3. VUE之文字跑马灯效果
  4. html 怎么显示在投影下面,投影仅底部css3
  5. drupal7 的安装方法
  6. 关于C++全局变量和静态变量初始化的一些总结
  7. app devops建设
  8. LeetCode 200. Number of Islands
  9. 接手一个APP,如何从0到1去做测试体系的搭建?
  10. python创建线程_Python 创建线程的方法
  11. 关于rocketmq的配置启动
  12. Pikachu-敏感信息泄露
  13. 利用计算机对人脸进行识别的应用领域是,计算机人脸识别技术及应用简析
  14. C语言调试教程总结(以visual studio和Dev C++为例)
  15. MySQL建立连接慢的处理
  16. Openwrt无线中继设置并访问外网
  17. [数据分析方法论]互联网人必须要懂的“幸存者偏差”
  18. LWN:使用Rust实现OpenPGP,这就是Sequoia项目!
  19. 安卓耗电监控app_拍照成罪魁祸首 十大安卓耗电App排行公布
  20. 用互联网思维给DApp算个命

热门文章

  1. 《Programming WPF》翻译 第7章 3.笔刷和钢笔
  2. tomcat7自身调优和JVM调优
  3. JavaScript服务器端开发基础之Math对象小结
  4. Rhel6-heartbeat配置文档
  5. Yii学习笔记【3】
  6. linux tomcat集群配置笔记
  7. 用户体验改善案例_如何检测用户的设备,以便改善他们的用户体验
  8. 编程基础 垃圾回收_为什么我回收编程问题
  9. 使用Typescript的巧妙React上下文技巧-不是Redux
  10. 如何获得更多的自由开发者客户