java将html转成图片

java 将html转成图片

    • 1.导入jar
    • 2.代码
    • 3.展示结果
    • 4.注意事项

最近有一个需求需要根据指定的样式生成图片,使用java原生技术有些麻烦,所以上网搜了下案例,最后发现最好用的还是html2image,这里进行简单总结下。

1.导入jar

 <!-- 用于将html转图片--><dependency><groupId>gui.ava</groupId><artifactId>html2image</artifactId><version>2.0.1</version></dependency>

2.代码

下面是示例代码,这里使用String的方式传入html信息,除了直接传入还支持传入文件流、传入文件等其他方式,差距不大,这里不列举其他方式的细节了。

import gui.ava.html.parser.HtmlParser;
import gui.ava.html.parser.HtmlParserImpl;
import gui.ava.html.renderer.ImageRenderer;
import gui.ava.html.renderer.ImageRendererImpl;public class TestTableToImage {public static void main(String[] args) throws Exception {HtmlParser htmlParser = new HtmlParserImpl();String HtmlTemplateStr = "<html lang=\"zh-CN\">\n" +"<head>\n" +"    <meta charset=\"UTF-8\">\n" +"    <title>入库单</title>\n" +"</head>\n" +"<body>\n" +"\t<!--外层的表格 -->\n" +"\t<table style=\"border: 2px solid black;padding: 10px \"  cellpadding=\"5\" align=\"center\" >\n" +"\t\n" +"\t\t<tr >\n" +"\t\t\t<th style=\"font-size:25px;height: 60px;\" align=\"center\">入库单</th>\n" +"\t\t</tr>\n" +"\t\t\n" +"\t\t<tr>\n" +"\t\t\t<th>\n" +"\t\t\t\t<table border=\"1\" style=\"border-color: #ccc;\" cellspacing=\"0\" cellpadding=\"15\" width=\"900px\">\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 60px;\">\n" +"\t\t\t\t\t\t<th style=\"width: 150px;\">调度单号</th> <th colspan=\"2\" style=\"width: 300px;\">调度单号22</th>\n" +"\t\t\t\t\t\t<th style=\"width: 150px;\">客户名称</th> <th colspan=\"2\" style=\"width: 300px;\">客户名称22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th >车牌照号</th> <th colspan=\"2\" style=\"width: 300px;\">车牌照号22</th>\n" +"\t\t\t\t\t\t<th>装运时间</th> <th colspan=\"2\" style=\"width: 300px;\">装运时间22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr height=\"50px;height: 50px;\">\n" +"\t\t\t\t\t\t<td colspan=\"6\" style=\"font-size:23px;color: #696969\" align=\"center\">货物信息</td>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th>钢卷号</th> <th colspan=\"2\" style=\"width: 300px;\">钢卷号22</th>\n" +"\t\t\t\t\t\t<th>磅单号</th> <th colspan=\"2\" style=\"width: 300px;\">磅单号22</th>\n" +"\t\t\t\t\t\t\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th>材质</th><th style=\"width: 150px;\">材质22</th>\n" +"\t\t\t\t\t\t<th>规格型号</th><th style=\"width: 150px;\">规格型号22</th>\n" +"\t\t\t\t\t\t<td>货物名称</td><th style=\"width: 150px;\">货物名称22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\" align=\"center\">\n" +"\t\t\t\t\t\t\n" +"\t\t\t\t\t\t<td>件数</td> <th colspan=\"2\" style=\"width: 300px;\">件数22</th>\n" +"\t\t\t\t\t\t<td>重量</td> <th colspan=\"2\" style=\"width: 300px;\">重量22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\" align=\"center\">\n" +"\t\t\t\t\t\t<td colspan=\"6\" style=\"font-size:23px;color: #696969\">客户信息</td>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th>收货联系人</th> <th colspan=\"2\" style=\"width: 300px;\">收货联系人22</th>\n" +"\t\t\t\t\t\t<th>收货人电话</th> <th colspan=\"2\" style=\"width: 300px;\">收货人电话22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th >库房名称</th> <th colspan=\"2\" style=\"width: 300px;\">库房名称22</th>\n" +"\t\t\t\t\t\t<th >库房地址</th> <th colspan=\"2\" style=\"width: 300px;\">库房地址22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t\n" +"\t\t\t\t\t<!--\n" +"\t\t\t\t\t<tr style=\"color: #696969;height: 50px;\">\n" +"\t\t\t\t\t\t<th >收货地点</th> <th colspan=\"5\" style=\"width: 750px;\">收货地点22</th>\n" +"\t\t\t\t\t</tr>\n" +"\t\t\t\t\t -->\n" +"\t\t\t\t</table>\n" +"\t\t\t</th>\n" +"\t\t\t\n" +"\t\t</tr>\n" +"\t\t\n" +"\t\t<tr style=\"height: 150px;\">\n" +"\t\t\t<th></th>\n" +"\t\t</tr>\n" +"\t\t\n" +"\t</table>\n" +"</body>\n" +"</html>";htmlParser.loadHtml(HtmlTemplateStr);ImageRenderer imageRenderer = new ImageRendererImpl(htmlParser);imageRenderer.setWidth(955);imageRenderer.saveImage("D:\\66.png");}}

3.展示结果

执行上面的代码生成的图片如下,可以看到效果还是不错的,相比于其他的三方jar来说这个jar还是挺方便,笔者也是尝试了多个jar最后决定用的这个三方包,推进使用,可以看到生成的效果还是不错的。
在这里插入图片描述

4.注意事项

我去maven仓库中找这个jar时,发现这个包已经很多年没有更新了,不过还是很好用,可以不用在意这个事。

  • 需要注意的是有一些格式如果不放到style中直接写可能识别不了,所以在使用时尽量所有格式写在style中,防止不生效
  • 此外还有一点,自动生成图片的宽度需要自己调整,这个宽度可能会有一些白边,使用imageRenderer.setWidth进行调整宽度即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android adb命令常用大全

android adb命令大全 1、取全量日志&#xff1a; adb logcat -v threadtime > 1.log2、dos窗口日志异常&#xff0c;使用命令清理下 adb logcat -G 200M3、直接在dos命令窗口查询某个关键字 adb logcat | findStr "KeyWord"4、查看版本号&#xff1a; adb sh…

腾讯视频VIP会员账号怎么扫码登录一个帐号登录几个人的设备?

腾讯视频VIP会员账号怎么扫码登录&#xff1f; 腾讯视频VIP会员账号要想实现扫码登录&#xff0c;仅支持在电脑Web网页版和WindowsPC软件上登录腾讯视频时&#xff0c;才可以实现手机QQ扫码登录腾讯视频。 腾讯视频VIP与SVIP会员有什么区别&#xff1f; 腾讯视频VIP会员&…

前端小白必学:对Cookie、localStorage 和 sessionStorage 的简单理解

前言 Cookie、localStorage 和 sessionStorage 作为Web开发领域中广泛采用的三种客户端数据存储技术&#xff0c;它们各自拥有独特的优势、应用场景及限制条件&#xff0c;共同支撑起前端数据管理的多样化需求。也是面试常考题之一&#xff0c;今天就和大家简单谈一下我对它们…

Python 量化

当涉及到量化金融和数据分析时&#xff0c;Python是一种非常流行的编程语言&#xff0c;因为它拥有丰富的库和工具&#xff0c;适用于处理金融数据、执行统计分析、制定交易策略等任务。下面是一些常用的Python量化金融模块及其功能的详细介绍&#xff1a; ### 1. **pandas** …

揭开大语言模型(LLM)内部运作的算法逻辑

本文探讨了 Anthropic 的突破性技术&#xff0c;以揭示大型语言模型 (LLM) 的内部工作原理&#xff0c;揭示其不透明的本质。通过深入研究LLM Claude Sonnet 的“大脑”&#xff0c;Anthropic 增强了人工智能的安全性和可解释性&#xff0c;为人工智能的决策过程提供了更深入的…

应用部署方式演变

应用部署方式演变 1.传统部署2.虚拟化部署3.容器化部署 1.传统部署 传统的应用程序部署是将多个应用程序直接部署在操作系统上&#xff0c;一旦其中的某个应用程序出现内存泄漏&#xff0c;那么该程序就会大量吞噬系统内容空间&#xff0c;导致其他应用程序无法正常运行。 2.虚…

如何让两个不同网段的直连地址通信(有点意思)

群里一个朋友出了个题&#xff1a;两个路由器接口直连&#xff0c;一个接口IP是1.1.1.1/30&#xff0c;一个接口IP是2.2.2.2/30&#xff0c;如何让它们通信&#xff1f; 群里的朋友们纷纷献策&#xff1a; 1、用PPP方式连接&#xff0c;直接通 2、配对端IP地址同网段的s…

鱼叉式钓鱼

鱼叉式网络钓鱼&#xff1a; 鱼叉式网络钓鱼是一种网络钓鱼形式&#xff0c;它针对特定个人或组织发送定制消息&#xff0c;旨在引发特定反应&#xff0c;例如泄露敏感信息或安装恶意软件。这些攻击高度个性化&#xff0c;使用从各种来源收集的信息&#xff0c;例如社交媒体资…

Face Adapter - 一键面部表情迁移、换脸工具 本地一键整合包下载

Face Adapter是一款高效的人脸编辑适配器&#xff0c;由浙江大学和腾讯联合开发&#xff0c;适用于预先训练的扩散模型&#xff0c;专门针对人脸再现和交换任务。 只需要上传一张源脸和一张参考人脸&#xff0c;就能按照参考人脸的风格生成相同的面部的表情&#xff0c;一键生…

掌握Python编程的深层技能

一、Python基础语法、变量、列表、字典等运用 1.运行python程序的两种方式 1.交互式即时得到程序的运行结果 2.脚本方式把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容2.python程序运行的三个步骤 python3.8 C:\a\b\c.py 1.先启动python3…

Golang-channel理解

channel golang-channel语雀笔记整理 channelgolang channel的设计动机&#xff1f;chanel的数据结构/设计思考 golang channel的设计动机&#xff1f; channel是一种不同协程之间实现异步通信的数据结构。golang中有一种很经典的说法是要基于通信实现共享内存&#xff0c;而不…

机器学习基础:开源库学习-Numpy科学计算库

目录 Numpy科学计算库 什么是多维数组 数组基础 高维数组 操作和创建数组 Numpy介绍 创建数组 数组的属性 二维数组 三维数组 数组元素的数据类型 创建特殊的数组 np.arange() np.ones() np.zeros() np.eye() np.linspace() np.logspace() asarray() 数组运…

AUTOSAR汽车电子嵌入式编程精讲300篇-智能网联汽车CAN总线-基于电压信号的CAN总线入侵检测系统设计与实现

目录 前言 入侵检测系统研究现状 入侵检测系统建模 CAN总线 入侵检测威胁模型 Deep SVDD模型 入侵检测系统方案设计 挑战和解决方案 差分信号的采集与处理 差分信号的特征提取 入侵检测模型的设计 入侵检测系统性能评估 实验环境设置 不同的车辆状态 不同数量的…

一致性哈希算法golang版本

什么是一致性哈希 一致性哈希&#xff08;Consistent Hashing&#xff09;是一种分布式系统中常用的算法&#xff0c;用于在节点&#xff08;如缓存服务器&#xff09;之间均匀分配数据。它的核心思想是将所有可能的哈希值组织成一个环形结构&#xff0c;并将数据和节点通过哈…

005 参数绑定处理

文章目录 参数绑定默认支持的参数类型参数绑定使用要求简单类型RequestParam注解 绑定POJO类型绑定集合或者数组类型 参数绑定示例JSP代码Controller代码PO代码 自定义日期参数绑定Converter代码Converter配置 文件类型参数绑定加入依赖包上传页面配置Multipart解析器Controlle…

thymeleaf+mybatis(本文章用于期末考前10分钟速看)

期末速看 pom&#xff08;了解&#xff09;application.propertiessql代码Controller控制层视图service&#xff1a; 服务层mapper&#xff08;dao&#xff09;&#xff1a;持久层entity层(model层&#xff0c;domain层、 bean)&#xff1a;对应数据库表&#xff0c;实体类 效果…

谈谈你对AQS的理解

AQS概述 AQS&#xff0c;全称为AbstractQueuedSynchronizer&#xff0c;是Java并发包&#xff08;java.util.concurrent&#xff09;中一个核心的框架&#xff0c;主要用于构建阻塞式锁和相关的同步器&#xff0c;也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIF…

模拟城市5: 未来之城 全DLC for Mac 下载安装包

模拟城市5&#xff1a;未来之城&#xff08;SimCity BuildIt&#xff09;是一款由Maxis开发并由 Electronic Arts&#xff08;EA&#xff09;发行的城市建设和管理模拟游戏。这款游戏最初在2014年发布&#xff0c;适用于iOS、Android以及Windows Phone平台&#xff0c;随后在20…

力扣最新详解5道题:两数之和三数之和四数之和

目录 一、查找总价格为目标值的两个商品 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;对撞指针 二、两数之和 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;哈希表法 三、三数之和 题目 题解 方法一&#xff1a;排序暴力枚举set去重 …

数据资产治理的智能化探索:结合云计算、大数据、人工智能等先进技术,探讨数据资产治理的智能化方法,为企业提供可靠、高效的数据资产解决方案,助力企业提升竞争力

一、引言 在信息化时代&#xff0c;数据已成为企业最重要的资产之一。随着云计算、大数据、人工智能等先进技术的飞速发展&#xff0c;数据资产治理面临着前所未有的机遇与挑战。本文旨在探讨如何结合这些先进技术&#xff0c;实现数据资产治理的智能化&#xff0c;为企业提供…