Java中PhantomJs怎么完成html图片输出功能
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇"Java中PhantomJs怎么完成html图片输出功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,
千家信息网最后更新 2025年01月24日Java中PhantomJs怎么完成html图片输出功能
这篇"Java中PhantomJs怎么完成html图片输出功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java中PhantomJs怎么完成html图片输出功能"文章吧。
I. 背景
如何在小程序里面生成一张图,分享到朋友圈呢?目前前端貌似没有太好的解决方法,所以只能猥琐的由后端来支持掉,那么可以怎么玩?
生成图片比较简单
简单的场景,可以直接用jdk来支持掉,一般来讲也没有太复杂的逻辑
之前写过一个图片合成的逻辑,利用awt实现: 图片合成
通用、复杂的模板
简单的可以直接支持,但复杂一点的,让后端来支持,无疑比较恶心,在github上也搜索了一些渲染html的开源库,不知道是姿势不对还是咋的,没有太满意的结果
现在对复杂的模板,要怎么支持呢?
也就是本篇的指南,利用phantomjs来实现html的渲染,支持生成pdf,生成图片,解析dom都ok,接下来则演示下如何结合 phantomjs 搭建一个网页渲染成图片的服务
II. 前提准备
1. phantom.js 安装
# 1. 下载## mac 系统wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip## linux 系统wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2## windows 系统## 就不要玩了,没啥意思# 2. 解压sudo su tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2# 如果解压报错,则安装下面的# yum -y install bzip2# 3. 安装## 简单点,移动到bin目录下cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin# 4. 验证是否okphantomjs --version# 输出版本号,则表示ok
2. java依赖配置
maven 配置添加依赖
org.seleniumhq.selenium selenium-java 2.53.1 com.github.detro ghostdriver 2.1.0 jitpack.io https://jitpack.io
开动
主要调用phantomjs来实现html渲染图片的逻辑如下
public class Html2ImageByJsWrapper { private static PhantomJSDriver webDriver = getPhantomJs(); private static PhantomJSDriver getPhantomJs() { //设置必要参数 DesiredCapabilities dcaps = new DesiredCapabilities(); //ssl证书支持 dcaps.setCapability("acceptSslCerts", true); //截屏支持 dcaps.setCapability("takesScreenshot", true); //css搜索支持 dcaps.setCapability("cssSelectorsEnabled", true); //js支持 dcaps.setJavascriptEnabled(true); //驱动支持(第二参数表明的是你的phantomjs引擎所在的路径,which/whereis phantomjs可以查看) // fixme 这里写了执行, 可以考虑判断系统是否有安装,并获取对应的路径 or 开放出来指定路径 dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/usr/local/bin/phantomjs"); //创建无界面浏览器对象 return new PhantomJSDriver(dcaps); } public static BufferedImage renderHtml2Image(String url) throws IOException { webDriver.get(url); File file = webDriver.getScreenshotAs(OutputType.FILE); return ImageIO.read(file); }}
测试case
public class Base64Util { public static String encode(BufferedImage bufferedImage, String imgType) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, imgType, outputStream); return encode(outputStream); } public static String encode(ByteArrayOutputStream outputStream) { return Base64.getEncoder().encodeToString(outputStream.toByteArray()); }}@Testpublic void testRender() throws IOException { BufferedImage img = null; for (int i = 0; i < 20; ++i) { String url = "https://my.oschina.net/u/566591/blog/1580020"; long start = System.currentTimeMillis(); img = Html2ImageByJsWrapper.renderHtml2Image(url); long end = System.currentTimeMillis(); System.out.println("cost: " + (end - start)); } System.out.println(Base64Util.encode(img, "png"));}
III. 网络实测
操作演示:
以上就是关于"Java中PhantomJs怎么完成html图片输出功能"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
支持
图片
内容
输出
复杂
系统
生成
功能
路径
逻辑
参数
文章
模板
知识
篇文章
搜索
演示
配置
不对
必要
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
宝山区市场软件开发常见问题
网络安全宣传周的总结报告
信息与网络安全的基础是
银行网络技术初级考试题
嘉兴云网络技术
数据库关系代输
arcgis中数据库建设是什么
三信网络技术
银行网络安全周宣传口号
防火墙 时间服务器
三级网络技术的分值
小程序开发服务器崩溃
手机启动网络安全保护
网易我的世界租凭服务器介绍
丽水制造软件开发总结
数据库技术存在的问题
贵州有哪些公司的服务器云空间
网状数据库使用树结构来描述关系
国家网络安全宣传文章
数据库如何存储账号和密码
数据库10g数据有多少条
云数据中心网络技术
上海r740服务器经销商
网络安全的手抄报彩色铅笔
沈林胜软件开发有限公司
网络安全知法守法
西安软件开发简介
xbox极限巅峰连不上服务器
实用网络安全技术感受
我的世界服务器账号被封了