Java 将HTML文件、HTML字符串转换为图片

在 Java 开发中,我们经常会遇到将 HTML 内容转换为图片的需求,比如生成网页报告截图、电商商品详情页预览图、在线文档缩略图等。本文将介绍如何使用 Free Spire.Doc for Java 库来实现这一功能。


Free Spire.Doc for Java 是一款免费库且无需任何依赖,有一定页面限制,适合中小型项目或个人开发者使用。 在开始之前,将以下依赖项添加到您的pom.xml文件中:

<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.com/nexus/content/groups/public/</url></repository>
</repositories>
<dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>5.3.2</version>
</dependency>

核心实现:HTML 转图片完整代码

Free Spire.Doc for Java 实现 HTML 转图片的逻辑很清晰:先将 HTML 内容加载为 Document 文档对象,再通过saveToImages 方法将文档页面转换为图片流,最后输出为本地图片文件。以下是两种常见场景的完整代码:

场景 1:转换本地 HTML 文件为图片

如果需要转换的 HTML 已保存为本地文件(如input.html),代码如下:

import com.spire.doc.*;
import com.spire.doc.documents.*;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;public class HTMLtoImage {public static void main(String[] args) throws Exception{// 加载 HTML 文档Document document = new Document();document.loadFromFile("E:\\input.html", FileFormat.Html, XHTMLValidationType.None);// 将 HTML 文档转换为图片BufferedImage[] images = document.saveToImages(ImageType.Bitmap);// 遍历图片集合for (int i = 0; i < images.length; i++) {// 将图像保存为 png 格式BufferedImage image = images[i];File file = new File(String.format(("HTML转图-%d.png"), i));ImageIO.write(image, "PNG", file);}}
}

输出:
HTML文件转图片

场景 2:转换 HTML 字符串为图片

若 HTML 内容是动态生成的字符串(如接口返回的 HTML 片段),无需保存为本地文件,可直接加载字符串转换:

import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;
import com.spire.doc.documents.Paragraph;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class HtmlStringToImage {public static void main(String[] args) throws IOException {// 定义HTML字符串(可包含图片标签等)String htmlContent = "<!DOCTYPE html>" +"<html>" +"<head><style>" +"body{font-family:Arial;}" +".title{color:#2E86AB;font-size:24px;}" +".content{margin-top:20px;line-height:1.8;}" +"</style></head>" +"<body>" +"<h1 class='title'> Java HTML字符串转图片</h1>" +"<div class='content'>这是一个HTML字符串转图片的测试案例。</div>" +"<img src='E:\\data.jpg' width='300' height='200'/>" +"</body></html>";// 创建Document对象,写入HTML字符串Document document = new Document();Paragraph paragraph = document.addSection().addParagraph();paragraph.appendHTML(htmlContent);// 转换为图片并保存BufferedImage[] images = document.saveToImages(ImageType.Bitmap);for (int i = 0; i < images.length; i++) {// 将图像保存为 png 格式BufferedImage image = images[i];File file = new File(String.format(("HTML字符串转图.png"), i));ImageIO.write(image, "PNG", file);}}
}

输出:
HTML字符串转换为图片


关键参数说明

为了让转换效果更符合需求,这里补充几个关键参数的调整技巧和注意事项:

  1. 图片格式选择:PNG 支持透明背景且无损压缩,适合文字类内容;JPG 压缩率高,适合含图片的 HTML(可通过ImageIO.write 调整图片格式)。
  2. HTML 兼容性注意事项:图片路径需使用绝对路径(如C:\\test.jpghttp://xxx.com/test.jpg),相对路径可能导致图片加载失败。
  3. 多页 HTML 处理:若 HTML 内容超过 1 页,saveToImages 方法会返回一个 BufferedImage 数组,每个元素对应 1 页图片,可通过循环遍历保存所有页面。

通过 Free Spire.Doc for Java 实现 HTML 转图片,代码简洁且无额外依赖,非常适合快速集成到项目中。除了 HTML 转图片,该免费 Java 库还支持更多Word文档处理功能,具体可查看官方文档。

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

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

相关文章

(Arxiv-2024)VideoMaker:零样本定制化视频生成,依托于视频扩散模型的内在力量

VideoMaker&#xff1a;零样本定制化视频生成&#xff0c;依托于视频扩散模型的内在力量 paper title&#xff1a;VideoMaker: Zero-shot Customized Video Generation with the Inherent Force of Video Diffusion Models paper是ZJU发布在Arxiv 2024的工作 Code:链接 图1. 我…

录屏、助眠、翻译

01【小熊录屏】 02【全球翻译】 03【声萌助眠】 03 软件获取 小熊录屏&#xff08;点击下载&#xff09; 声萌助眠&#xff08;点击下载&#xff09; 全球-译官&#xff08;点击下载&#xff09;

第17章|PowerShell 安全警报——高分学习笔记(运维实战向)

&#x1f6e1;️ 第17章&#xff5c;PowerShell 安全警报——高分学习笔记&#xff08;运维实战向&#xff09;一句话核心&#xff1a;PowerShell 的“安全设计目标”是——不替你越权&#xff1b;尽量防“误触发不可信脚本”&#xff1b;并非反恶意软件的最后防线。1&#xff…

哈希表性能对比:uthash、hsearch与Linux内核哈希表的深度解析

引言 在网络编程和高性能服务器开发中,高效的数据结构是保证系统性能的关键。本文基于对三种主流哈希表实现(uthash、hsearch和Linux内核哈希表)的深度测试,探讨它们在处理50,000个客户端连接时的性能表现、内存效率及适用场景。 测试环境与方法 测试数据结构 我们使用…

探索 XGBoost 与 LightGBM 的差异:哪个更适合你的项目?

轻松对比&#xff1a;XGBoost 和 LightGBM 的差异与选择指南 在机器学习领域&#xff0c;梯度提升树&#xff08;GBDT&#xff09;是一种广泛使用的算法&#xff0c;而 XGBoost 和 LightGBM 是两款最受欢迎的 GBDT 实现。它们都能够显著提高模型的准确性&#xff0c;但它们之间…

C++链表双杰:list与forward_list

在C容器的世界里&#xff0c;当我们需要频繁地在序列中间进行插入和删除时&#xff0c;基于数组的 vector 会显得力不从心。这时&#xff0c;链表结构就闪亮登场了。STL提供了两种链表容器&#xff1a;功能全面的双向链表 std::list 和极致轻量化的单向链表 std::forward_list。…

Ruoyi-vue-plus-5.x第一篇Sa-Token权限认证体系深度解析:1.4 Sa-Token高级特性实现

&#x1f44b; 大家好&#xff0c;我是 阿问学长&#xff01;专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等&#xff0c;欢迎关注交流&#xff01;&#x1f680; Sa-Token高级特性实现 前言 在前面的文章中&#xff0c;我们学习了Sa-Token的…

Linux 服务器初始化解析和ssh密钥交换的介绍

目录 2. SSH 基于密钥交换的介绍和原理 2.1 核心优势 2.2 密钥交换原理&#xff08;非对称加密体系&#xff09; 2.3 基础配置步骤 3. 服务器初始化 3.1 安装 yum 网络源 3.1.1 背景说明 3.1.2 实操步骤 3.2 安装运维的必备工具 3.2.1 工具清单 3.2.2 批量安装命令 …

web渗透ASP.NET(Webform)反序列化漏洞

web渗透ASP.NET(Webform)反序列化漏洞1&#xff09;ASP.NET(Webform)反序列化漏洞ASP.NET(Webform) 反序列化漏洞的核心触发点是 Webform 框架中的VIEWSTATE参数 —— 该参数用于存储页面控件状态数据&#xff0c;默认以 Base64 编码传输&#xff0c;内部包含序列化的对象数据。…

Android FrameWork - 开机启动 SystemServer 进程

基于安卓 12 源码分析相关类&#xff1a;frameworks/base/core/java/com/android/internal/os/ZygoteInit.java frameworks/base/core/java/com/android/internal/os/Zygote.java frameworks/base/core/java/com/android/internal/os/RuntimeInit.java frameworks/base/service…

C++:list容器--模拟实现(下篇)

1. 模拟实现 list 一些常用接口// list.h #pragma once #include <assert.h> #include "Iterator.h"namespace room {template<class T>struct list_node{list_node<T>* _next;list_node<T>* _prev;T _data;list_node(const T& x T()):…

边缘计算:一场由物理定律发起的“计算革命”

专栏引言:在前面的文章中,我们探讨了云计算如何将计算资源变成了“数字水电煤”,构建了一个强大的中心化数字帝国。然而,当这个帝国试图将它的触角伸向物理世界的每一个角落时,却遭遇了两位“上古之神”的无情阻击——光速与带宽。今天,我们将聚焦于一场由物理定律发起的…

量化模型部署工具llama.cpp

量化模型部署工具llama.cppllama.cppllama.cpp 是什么使用场景是什么如何使用&#xff1f;第 1 步&#xff1a;获取量化模型第 2 步&#xff1a;编译 llama.cpp第 3 步&#xff1a;运行推理完整 Demo&#xff1a;与 Llama 3 对话进阶使用&#xff1a;Python 集成总结概念解释1.…

【光照】[光照模型]发展里程碑时间线

【从UnityURP开始探索游戏渲染】专栏-直达 图形学光照模型发展史&#xff1a;技术演进与里程碑 section 基础奠基期(1960s-1970s) 1967 &#xff1a; Lambert模型(漫反射) - Bui Tuong Phong提出1971 &#xff1a; Gouraud着色 - Henri Gouraud发明顶点插值着色1973 &#xf…

【从零开始java学习|第十篇】面向对象

目录 一、面向对象介绍 二、类和对象 1. 类&#xff08;Class&#xff09;&#xff1a;对象的模板 2. 对象&#xff08;Object&#xff09;&#xff1a;类的实例 三、封装 1. 封装的概念 2. 封装的优势 四、就近原则和 this 关键字 1. 就近原则 2. this 关键字 五、…

Spark算子调优

Spark中可用下面的算子对数据计算进行优化处理&#xff0c;包括&#xff1a; mapPartition&#xff1a;一次处理一个分区数据&#xff0c;能够使用mapPartition的尽量使用&#xff0c;但是使用时会一次性读取整个分区数据到内存&#xff0c;占内存很大&#xff0c;同理还有fore…

码农特供版《消费者权益保护法》逆向工程指北——附源码级注释与异常处理方案

尊敬的审核&#xff1a; 本人文章《码农特供版〈消费者权益保护法〉逆向工程指北——附源码级注释与异常处理方案》 1. 纯属技术交流&#xff0c;无任何违法内容 2. 所有法律引用均来自公开条文 3. 请依据《网络安全法》第12条“不得无故删除合法内容”处理 附&#xff1a;本文…

MQTT 连接建立与断开流程详解(二)

三、核心机制与最佳实践&#xff08;一&#xff09;会话管理与 QoS 保障Clean Session vs 持久会话&#xff1a;在 MQTT 连接中&#xff0c;会话管理是一个重要的概念&#xff0c;其中 Clean Session 和持久会话是两种不同的会话模式。Clean Session&#xff0c;当设置为 1 时&…

[光学原理与应用-332]:ZEMAX - 序列模式与非序列模式的本质、比较

序列模式&#xff08;Sequential Mode&#xff09;与非序列模式&#xff08;Non-Sequential Mode&#xff09;是ZEMAX光学设计软件中的两种核心设计模式&#xff0c;二者在光路定义、分析工具、应用场景等方面存在本质差异。以下是两者的详细比较&#xff1a;一、本质差异光路定…

WeakAuras Lua Script (My Version)

分享下我的WA的简约配置&#xff0c;大多数都是团队框架高亮&#xff0c;辅助大脚DBM监控 表格&#xff1a; WeakAuras Lua Script &#xff1c;BiaoGe&#xff1e;_wa拍卖字符串-CSDN博客 ICC 监控&#xff0c;只要团队框架监控 WeakAuras Lua Script ICC &#xff08;Barne…