服务端实现对页面截图 - PhantomJs

版权声明 :

本文为博主原创文章,如需转载,请注明出处(https://blog.csdn.net/F1004145107/article/details/97786555)

目录

/ 1 / 前言

/ 2 / 使用方式

/ 3 / 结语 


  • / 1 / 前言

        本文主要讲解的是关于在Java服务端使用PhandomJs来实现对指定页面(页面可包含echarts等图表)进行截图并将图片保存服务器,文末附源码

        PhandomJs是一个无头浏览器,除了无法展示页面,其它功能基本都可以做到,它可以在后台完成页面的渲染

        感兴趣的可以了解一下 :

        PhandomJs中文文档

        PhandomJs官网下载地址

        windows安装方式

        mac安装方式

        本文主要是介绍PhandomJs这种工具的,不设计到原理,话不多说,我们直接开始

  • / 2 / 使用方式

    服务端PhandomJs.class

         本文演示电脑为mac,文中单独注释了windows电脑的类比路径

package com.example.demo;
​
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
​
/**
 * @author wise
 */
public class PhandomJs {
​
    public static void main(String[] args) throws IOException {
        InputStream inputStream = null;
        BufferedReader reader = null;
        Process process = null;
        try {
            //phantomJs的安装路径   windows:D:/Users/wise/install/phantomjs-2.1.1-windows/bin/phantomjs.exe
            String phantomJsPath = "/Users/wise/install/phantomjs-2.1.1-macosx/bin/phantomjs";
            //自己的js脚本文件   windows:D:/Users/wise/demo/src/main/resources/static/test.js
            String jsPath = "/Users/wise/projects/demo/src/main/resources/static/test.js";
            //要截图页面的url路径
            String url = "https://echarts.baidu.com/echarts2/doc/example/line1.html";
            //截图后的图片输出路径    windows:D:/Users/wise/Desktop/test.png
            String targetUrl = "/Users/wise/Desktop/test.png";
            //分隔符,在test.js中靠空格来区分参数
            String separate = " ";
            //调用终端来执行命令
            process = Runtime.getRuntime().exec(
                phantomJsPath + separate
                    + jsPath + separate
                    + url + separate
                    + targetUrl + separate);
            inputStream = process.getInputStream();
            reader = new BufferedReader(new InputStreamReader(inputStream));
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (reader != null) {
                reader.close();
            }
            if (process != null) {
                process.destroy();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }
}

        脚本 : test.js    

var page = require('webpage').create(),
    system = require('system'),
    address, output, size;
//参数个数如果小于3个,直接终止
if (system.args.length < 3 || system.args.length > 5) {
    phantom.exit();
} else {
    //获取第二个参数,截图页面的url
    address = system.args[1];
    //获取第三个参数,截图输出的路径
    output = system.args[2];
    page.viewportSize = { width: 1024, height: 1000 };
    page.open(address, function (status) {
      // 通过在页面上执行脚本获取页面的渲染高度
        var bb = page.evaluate(function () {
        return document.getElementsByTagName('html')[0].getBoundingClientRect(); 
      });
      // 按照实际页面的高度,设定渲染的宽高
      page.clipRect = {
        top:    bb.top,
        left:   bb.left,
        width:  bb.width,
        height: bb.height
      };
      // 预留一定的渲染时间
      window.setTimeout(function () {
        //截图
        page.render(output);
        page.close();
        phantom.exit();
        console.log('render ok');
      }, 5000);
    });
}

        效果

        

  • 运行流程

           Java通过调用终端的来使用phandomjs的客户端调用指定脚本,我们在脚本里面打开页面并截图保存

  • / 3 / 结语

           其实PhandomJs更适合对静态页面进行截图,因为我们无法控制它等待页面渲染完成再去截图,所以如果你的数据报表页面需要动态的请求数据的话那么可能截取出来的是一张空白的图,而且PhantomJs目前已基本不维护了,所以我们无法保证在以后他任然可以正常工作,我也找到了它的替代服务端实现对页面截图 - Headless Chrome

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值