C#借助Free Spire.Doc for .NET實(shí)現(xiàn)將HTML轉(zhuǎn)換為RTF富文本格式
在辦公自動(dòng)化、文檔導(dǎo)出、報(bào)表生成等場(chǎng)景中,HTML 與RTF格式的轉(zhuǎn)換是常見(jiàn)需求。RTF(Rich Text Format)作為跨平臺(tái)的富文本格式,兼容Word、WPS等主流辦公軟件,而HTML則是網(wǎng)頁(yè)內(nèi)容的標(biāo)準(zhǔn)格式。Free Spire.Doc for .NET 是一款免費(fèi)高效的 .NET 文檔處理庫(kù),支持 HTML 到 RTF 的快速轉(zhuǎn)換,且無(wú)需依賴 Office 或其他第三方軟件。本文將詳細(xì)講解如何使用該免費(fèi)庫(kù)通過(guò) C# 代碼實(shí)現(xiàn) HTML 到 RTF 的轉(zhuǎn)換。
通過(guò)Nuget安裝 Free Spire.Doc:Install-Package FreeSpire.Doc
HTML→RTF核心轉(zhuǎn)換原理
Free Spire.Doc for .NET 實(shí)現(xiàn)HTML到RTF轉(zhuǎn)換的核心流程如下:
- HTML解析:通過(guò)內(nèi)置的HTML解析引擎,解析HTML字符串/文件中的標(biāo)簽(如
<p>、<font>、<table>)、屬性(如style、src)和內(nèi)容; - 樣式映射:將HTML的CSS樣式(內(nèi)聯(lián)樣式、
<style>標(biāo)簽樣式)映射為RTF支持的富文本格式(字體、顏色、段落間距、表格邊框等); - 文檔構(gòu)建:創(chuàng)建
Document對(duì)象(Free Spire.Doc的核心文檔模型),將解析后的HTML內(nèi)容轉(zhuǎn)化為文檔的Section、Paragraph、Table等元素; - RTF導(dǎo)出:調(diào)用
Document.SaveToFile()方法,指定保存格式為FileFormat.Rtf,生成RTF文件(或輸出為流)。
實(shí)戰(zhàn)示例(覆蓋多場(chǎng)景)
以下示例代碼均包含詳細(xì)注釋,可直接復(fù)制運(yùn)行。需先添加命名空間:
using System; using System.IO; using Spire.Doc; using Spire.Doc.Documents;
示例1:基礎(chǔ)場(chǎng)景——HTML字符串轉(zhuǎn)RTF文件
適用于簡(jiǎn)單HTML內(nèi)容(無(wú)復(fù)雜樣式、圖片),快速實(shí)現(xiàn)轉(zhuǎn)換。
class Program
{
static void Main(string[] args)
{
try
{
// 1. 定義HTML字符串(簡(jiǎn)單文本+基礎(chǔ)樣式)
string htmlContent = @"
<html>
<body>
<h1 style='color: #2E86AB; font-size: 24px;'>HTML轉(zhuǎn)RTF基礎(chǔ)示例</h1>
<p style='font-family: 微軟雅黑; font-size: 14px; line-height: 1.5;'>
這是通過(guò)Free Spire.Doc轉(zhuǎn)換的RTF文檔,支持<b>粗體</b>、<i>斜體</i>、<u>下劃線</u>等格式。
</p>
<ul style='color: #A23B72;'>
<li>列表項(xiàng)1</li>
<li>列表項(xiàng)2</li>
</ul>
</body>
</html>";
// 2. 創(chuàng)建Document對(duì)象(Free Spire.Doc的核心文檔實(shí)例)
Document doc = new Document();
// 3. 添加一個(gè)文檔節(jié)(Section)和段落(Paragraph)
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();
// 4. 將HTML內(nèi)容追加到段落中(關(guān)鍵方法:AppendHTML)
paragraph.AppendHTML(htmlContent);
// 5. 保存為RTF文件(指定格式為FileFormat.Rtf)
string outputPath = @"D:\Output\BasicHtmlToRtf.rtf";
doc.SaveToFile(outputPath, FileFormat.Rtf);
Console.WriteLine($"RTF文件生成成功!路徑:{outputPath}");
}
catch (Exception ex)
{
Console.WriteLine($"轉(zhuǎn)換失?。簕ex.Message}");
}
}
}
運(yùn)行效果:生成的RTF文件可在Word中打開(kāi),完美保留標(biāo)題顏色、字體、列表樣式及文本格式。
示例2:進(jìn)階場(chǎng)景——含圖片/表格的HTML轉(zhuǎn)換
實(shí)際開(kāi)發(fā)中,HTML常包含圖片(本地圖片、網(wǎng)絡(luò)圖片、Base64圖片)和表格,以下示例覆蓋這些場(chǎng)景。
含本地/網(wǎng)絡(luò)圖片的HTML轉(zhuǎn)換
class Program
{
static void Main(string[] args)
{
Document doc = new Document();
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();
// HTML內(nèi)容:包含本地圖片(絕對(duì)路徑)和網(wǎng)絡(luò)圖片
string htmlWithImage = @"
<html>
<body>
<h2>含圖片的HTML轉(zhuǎn)換</h2>
<p>本地圖片:</p>
<img src='C:\Users\Administrator\Pictures\test.png' width='300' height='200' alt='本地圖片'/>
<p>網(wǎng)絡(luò)圖片:</p>
<img src='https://picsum.photos/400/250' width='400' height='250' alt='網(wǎng)絡(luò)圖片'/>
</body>
</html>";
// 追加HTML時(shí)指定導(dǎo)入選項(xiàng)
paragraph.AppendHTML(htmlWithImage);
// 保存RTF
string outputPath = @"HtmlWithImage.rtf";
doc.SaveToFile(outputPath, FileFormat.Rtf);
Console.WriteLine($"含圖片的RTF生成成功:{outputPath}");
}
}

含表格的HTML轉(zhuǎn)換
class Program
{
static void Main(string[] args)
{
Document doc = new Document();
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();
// HTML表格(帶邊框、合并單元格、樣式)
string htmlWithTable = @"
<html>
<body>
<h2>含表格的HTML轉(zhuǎn)換</h2>
<table border='1' cellpadding='5' cellspacing='0' style='border-collapse: collapse; width: 80%;'>
<tr style='background-color: #E8F4FD;'>
<th>姓名</th>
<th>年齡</th>
<th>部門</th>
</tr>
<tr>
<td>張三</td>
<td>28</td>
<td rowspan='2'>研發(fā)部</td> <!-- 合并單元格 -->
</tr>
<tr>
<td>李四</td>
<td>32</td>
</tr>
<tr>
<td colspan='3' style='text-align: center;'>員工信息表</td> <!-- 合并單元格 -->
</tr>
</table>
</body>
</html>";
paragraph.AppendHTML(htmlWithTable);
string outputPath = @"HtmlWithTable.rtf";
doc.SaveToFile(outputPath, FileFormat.Rtf);
Console.WriteLine($"含表格的RTF生成成功:{outputPath}");
}
}

注意:
- 本地圖片需提供絕對(duì)路徑(或相對(duì)路徑,確保程序有權(quán)限訪問(wèn));
- 網(wǎng)絡(luò)圖片需保證程序能訪問(wèn)外網(wǎng),若無(wú)法訪問(wèn)可先下載到本地再引用;
- Free Spire.Doc 支持 JPG、PNG、GIF、BMP等常見(jiàn)圖片格式,Base64 圖片需確保編碼正確。
示例3:批量轉(zhuǎn)換——文件夾中所有HTML文件轉(zhuǎn)RTF
適用于需要批量處理多個(gè)HTML文件的場(chǎng)景(如批量導(dǎo)出報(bào)表)。
class Program
{
static void Main()
{
// 僅需修改這兩個(gè)路徑(輸入HTML文件夾、輸出RTF文件夾)
string inputFolder = @"D:\HTML文件";
string outputFolder = @"D:\RTF輸出";
try
{
// 檢查輸入文件夾,不存在則提示退出
if (!Directory.Exists(inputFolder))
{
Console.WriteLine($"輸入文件夾不存在:{inputFolder}");
return;
}
// 自動(dòng)創(chuàng)建輸出文件夾(不存在時(shí))
if (!Directory.Exists(outputFolder))
{
Directory.CreateDirectory(outputFolder);
Console.WriteLine($"已創(chuàng)建輸出文件夾:{outputFolder}");
}
// 獲取所有.html文件(不包含子文件夾)
string[] htmlFiles = Directory.GetFiles(inputFolder, "*.html");
if (htmlFiles.Length == 0)
{
Console.WriteLine("輸入文件夾中未找到HTML文件!");
return;
}
Console.WriteLine($"找到{htmlFiles.Length}個(gè)HTML文件,開(kāi)始轉(zhuǎn)換...");
// 批量轉(zhuǎn)換核心邏輯
foreach (string htmlFile in htmlFiles)
{
string fileName = Path.GetFileName(htmlFile);
try
{
// 每個(gè)文件創(chuàng)建獨(dú)立Document實(shí)例(自動(dòng)釋放資源)
using (Document doc = new Document())
{
// 直接加載HTML(無(wú)額外配置)
doc.LoadFromFile(htmlFile, FileFormat.Html, XHTMLValidationType.None);
// 構(gòu)建輸出路徑(原文件名+(.rtf)后綴)
string rtfPath = Path.Combine(outputFolder, Path.ChangeExtension(fileName, ".rtf"));
// 直接保存為RTF(無(wú)額外配置)
doc.SaveToFile(rtfPath, FileFormat.Rtf);
}
Console.WriteLine($"? 成功:{fileName}");
}
catch (Exception ex)
{
Console.WriteLine($"? 失?。簕fileName} → 原因:{ex.Message}");
}
}
Console.WriteLine("\n轉(zhuǎn)換完成!輸出路徑:" + outputFolder);
}
catch (Exception ex)
{
Console.WriteLine($"程序異常:{ex.Message}");
}
}
}
注意事項(xiàng):免費(fèi)版有頁(yè)面限制,不適合大型文檔。
總結(jié)
Free Spire.Doc for .NET 提供了簡(jiǎn)單、高效的HTML到RTF轉(zhuǎn)換方案,無(wú)需依賴Office,支持文本、樣式、圖片、表格等核心元素的完整保留。通過(guò)本文的示例,開(kāi)發(fā)者可快速實(shí)現(xiàn)基礎(chǔ)轉(zhuǎn)換和批量轉(zhuǎn)換等場(chǎng)景需求。
整體而言,該組件是.NET平臺(tái)中文檔格式轉(zhuǎn)換的優(yōu)質(zhì)選擇,廣泛適用于辦公自動(dòng)化、報(bào)表系統(tǒng)、文檔導(dǎo)出等場(chǎng)景。
到此這篇關(guān)于C#借助Free Spire.Doc for .NET實(shí)現(xiàn)將HTML轉(zhuǎn)換為RTF富文本格式的文章就介紹到這了,更多相關(guān)C# HTML轉(zhuǎn)RTF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出
這篇文章主要介紹了C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)直接跳轉(zhuǎn)頁(yè)數(shù)
這篇文章主要為大家詳細(xì)介紹了Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè),直接跳轉(zhuǎn)頁(yè)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#遞歸方法實(shí)現(xiàn)無(wú)限級(jí)分類顯示效果實(shí)例
這篇文章主要介紹了C#遞歸方法實(shí)現(xiàn)無(wú)限級(jí)分類顯示效果,結(jié)合完整實(shí)例形式分析了C#遞歸算法與數(shù)據(jù)元素遍歷的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
在winform下實(shí)現(xiàn)左右布局多窗口界面的方法之續(xù)篇
這篇文章主要介紹了在winform下實(shí)現(xiàn)左右布局多窗口界面的方法之續(xù)篇 的相關(guān)資料,需要的朋友可以參考下2016-02-02
C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條效果
這篇文章主要介紹了基于C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條 效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
基于C#實(shí)現(xiàn)PDF到PPTX的自動(dòng)化轉(zhuǎn)換的方案
在現(xiàn)代辦公和數(shù)據(jù)展示中,PDF和PowerPoint扮演著不可或缺的角色,本文將深入探討如何利用C#實(shí)現(xiàn)PDF到PowerPoint的無(wú)縫轉(zhuǎn)換,希望對(duì)大家有所幫助2025-12-12

