Java實(shí)現(xiàn)將HTML文件與字符串轉(zhuǎn)換為圖片
前言
在 Java 開發(fā)中,我們經(jīng)常會(huì)遇到將 HTML 內(nèi)容轉(zhuǎn)換為圖片的需求,比如生成網(wǎng)頁報(bào)告截圖、電商商品詳情頁預(yù)覽圖、在線文檔縮略圖等。本文將介紹如何使用 Free Spire.Doc for Java 庫來實(shí)現(xiàn)這一功能。
Free Spire.Doc for Java 是一款免費(fèi)庫且無需任何依賴,有一定頁面限制,適合中小型項(xiàng)目或個(gè)人開發(fā)者使用。 在開始之前,將以下依賴項(xiàng)添加到您的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>
核心實(shí)現(xiàn):HTML 轉(zhuǎn)圖片完整代碼
Free Spire.Doc for Java 實(shí)現(xiàn) HTML 轉(zhuǎn)圖片的邏輯很清晰:先將 HTML 內(nèi)容加載為 Document 文檔對(duì)象,再通過saveToImages 方法將文檔頁面轉(zhuǎn)換為圖片流,最后輸出為本地圖片文件。以下是兩種常見場(chǎng)景的完整代碼:
場(chǎng)景 1:轉(zhuǎn)換本地 HTML 文件為圖片
如果需要轉(zhuǎn)換的 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 文檔轉(zhuǎn)換為圖片
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轉(zhuǎn)圖-%d.png"), i));
ImageIO.write(image, "PNG", file);
}
}
}
輸出:

場(chǎng)景 2:轉(zhuǎn)換 HTML 字符串為圖片
若 HTML 內(nèi)容是動(dòng)態(tài)生成的字符串(如接口返回的 HTML 片段),無需保存為本地文件,可直接加載字符串轉(zhuǎn)換:
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字符串(可包含圖片標(biāo)簽等)
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字符串轉(zhuǎn)圖片</h1>" +
"<div class='content'>這是一個(gè)HTML字符串轉(zhuǎn)圖片的測(cè)試案例。</div>" +
"<img src='E:\\data.jpg' width='300' height='200'/>" +
"</body></html>";
// 創(chuàng)建Document對(duì)象,寫入HTML字符串
Document document = new Document();
Paragraph paragraph = document.addSection().addParagraph();
paragraph.appendHTML(htmlContent);
// 轉(zhuǎn)換為圖片并保存
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字符串轉(zhuǎn)圖.png"), i));
ImageIO.write(image, "PNG", file);
}
}
}
輸出:

關(guān)鍵參數(shù)說明
為了讓轉(zhuǎn)換效果更符合需求,這里補(bǔ)充幾個(gè)關(guān)鍵參數(shù)的調(diào)整技巧和注意事項(xiàng):
- 圖片格式選擇:PNG 支持透明背景且無損壓縮,適合文字類內(nèi)容;JPG 壓縮率高,適合含圖片的 HTML(可通過
ImageIO.write調(diào)整圖片格式)。 - HTML 兼容性注意事項(xiàng):圖片路徑需使用絕對(duì)路徑(如
C:\\test.jpg或http://xxx.com/test.jpg),相對(duì)路徑可能導(dǎo)致圖片加載失敗。 - 多頁 HTML 處理:若 HTML 內(nèi)容超過 1 頁,
saveToImages方法會(huì)返回一個(gè)BufferedImage數(shù)組,每個(gè)元素對(duì)應(yīng) 1 頁圖片,可通過循環(huán)遍歷保存所有頁面。
通過 Free Spire.Doc for Java 實(shí)現(xiàn) HTML 轉(zhuǎn)圖片,代碼簡潔且無額外依賴,非常適合快速集成到項(xiàng)目中。除了 HTML 轉(zhuǎn)圖片,該免費(fèi) Java 庫還支持更多Word文檔處理功能。
到此這篇關(guān)于Java實(shí)現(xiàn)將HTML文件與字符串轉(zhuǎn)換為圖片的文章就介紹到這了,更多相關(guān)Java HTML轉(zhuǎn)圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程
這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
Java面試題沖刺第二十六天--實(shí)戰(zhàn)編程
這篇文章主要為大家分享了最有價(jià)值的三道java實(shí)戰(zhàn)面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-08-08
Mybatis-Plus實(shí)體類繼承Model的使用小結(jié)
Mybatis-Plus實(shí)體類繼承Model的使用是Mybatis-Plus中的一個(gè)重要特性,它允許開發(fā)者通過繼承Model類來快速實(shí)現(xiàn)一些通用的功能,本文主要介紹了Mybatis-Plus實(shí)體類繼承Model的使用小結(jié),感興趣的可以了解一下2024-07-07
Java Stream 的 flatMap 與 map 的核
map進(jìn)行元素到元素的單層轉(zhuǎn)換,flatMap則將元素映射為流后再扁平化處理,適用于嵌套結(jié)構(gòu)展開,二者核心差異在于是否展開多層數(shù)據(jù),選擇時(shí)需根據(jù)數(shù)據(jù)結(jié)構(gòu)層級(jí)和性能需求決定,本文給大家介紹Java Stream 的flatMap與map的核心區(qū)別,感興趣的朋友一起看看吧2025-08-08
Java簡單實(shí)現(xiàn)約瑟夫環(huán)算法示例
這篇文章主要介紹了Java簡單實(shí)現(xiàn)約瑟夫環(huán)算法,簡單描述了約瑟夫環(huán)問題,并結(jié)合實(shí)例形式分析了Java實(shí)現(xiàn)約瑟夫環(huán)的具體操作技巧,需要的朋友可以參考下2017-09-09
springboot?log4j2.xml如何讀取application.yml中屬性值
這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

