我們很高興宣布 GroupDocs.Markdown for .NET 26.3 已於 2026年3月 發佈。此重大更新引入了重新設計的公共 API、自訂基於 DOM 的 Markdown 渲染器、完整的 Markdown 方言控制、非同步支援,以及一系列錯誤修復。它還新增了每個 TFM 的執行時 NuGet 套件,並支援 .NET 8 與 .NET 10。
本次發行的新功能
| 鍵 | 類別 | 摘要 |
|---|---|---|
| MARKDOWNNET-33 | 功能 | 將 NuGet 套件拆分為每個 TFM 的執行時套件 |
| MARKDOWNNET-31 | 功能 | 新增對 .NET 8 和 .NET 10 的支援 |
| MARKDOWNNET-30 | 功能 | 自訂基於 DOM 的 Markdown 渲染器 |
| MARKDOWNNET-29 | 功能 | 轉換警告與統一錯誤模型 |
| MARKDOWNNET-28 | 功能 | 相對圖像路徑與圖像替換 |
| MARKDOWNNET-27 | 功能 | 標題層級偏移與 YAML 前置資料產生 |
| MARKDOWNNET-26 | 功能 | Markdown 方言控制與試算表渲染選項 |
| MARKDOWNNET-25 | 功能 | 無需轉換的文件檢查 |
| MARKDOWNNET-24 | 功能 | 非同步 API |
| MARKDOWNNET-23 | 功能 | 靜態便利方法與格式偵測 |
| MARKDOWNNET-20 | 增強 | 檢視與重新設計 API |
| MARKDOWNNET-8 | 功能 | 支援在轉換為 Markdown 時替換圖像 |
| MARKDOWNNET-35 | 錯誤修復 | 品質與功能問題 |
公共 API 變更
新的公共類型
DocumentInfo— 文件元資料(格式、頁數、標題、作者、加密狀態)MarkdownFlavor— 列舉,用於目標 Markdown 方言(GitHub、CommonMark)IImageSavingHandler— 介面,用於自訂圖像儲存回呼IUriSavingHandler— 介面,用於自訂 URI 儲存回呼GroupDocsMarkdownException— 一般轉換例外InvalidFormatException— 損壞或無法辨識的檔案格式DocumentProtectedException— 錯誤或缺少的密碼
MarkdownConverter 的新靜態方法
ToMarkdown(string sourcePath)以及使用LoadOptions/ConvertOptions的重載ToFile(string sourcePath, string outputPath)以及重載GetInfo(string sourcePath)以及重載GetSupportedFormats()- 非同步變體:
ToMarkdownAsync、ToFileAsync、GetInfoAsync
MarkdownConverter 的新實例方法
GetDocumentInfo()ConvertAsync()以及重載
ConvertOptions 的新屬性
ImageExportStrategy(取代ExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns、MaxRows、SheetSeparator、IncludeHiddenSheets
ConvertResult 的新屬性
Warnings— 非致命的轉換警告
ExportImagesToFileSystemStrategy 與 CustomImagesStrategy 的新屬性
ImagesRelativePath— 控制 Markdown 圖像引用中寫入的路徑
CustomImageSavingArgs 的新方法
SetReplacementImage(Stream imageStream)— 替換圖像內容
已移除的類型
IExportStrategy— 已被IImageExportStrategy與IUriExportStrategy取代DocumentConverterOptions— 已重新命名為ConvertOptionsDocumentConverterResult— 已重新命名為ConvertResult
重大變更
已重新命名的類型
| 之前 | 之後 |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
FileFormat 列舉
家族層級的值(FileFormat.WordProcessing、FileFormat.Spreadsheet)已被具體格式(FileFormat.Docx、FileFormat.Xlsx 等)取代。新增條目:FileFormat.Txt、FileFormat.Chm。
ConvertOptions 與 LoadOptions 分離
ConvertOptions 不再繼承自 LoadOptions。密碼與格式提示應放在 LoadOptions 上:
var loadOptions = new LoadOptions(FileFormat.Docx) { Password = "secret" };
var convertOptions = new ConvertOptions { HeadingLevelOffset = 1 };
using var converter = new MarkdownConverter("file.docx", loadOptions);
var result = converter.Convert(convertOptions);
圖像與 URI 策略分離
單一 ExportStrategy 屬性已被兩個具體屬性取代:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
代理已被介面取代
CustomImagesStrategy 與 CustomUriExportStrategy 現在接受 IImageSavingHandler 與 IUriSavingHandler 介面,而非委派回呼。
LoadOptions.Extension 與 LoadOptions.MimeType 為內部成員
請使用 new LoadOptions(FileFormat.Docx),而不是直接設定 Extension 或 MimeType。
新功能
自訂基於 DOM 的 Markdown 渲染器
此函式庫不再將 Markdown 產生委派給第三方匯出。自訂渲染器逐節點遍歷文件物件模型,直接產生 Markdown,提供對輸出每個細節的完整控制。
Word/PDF/Ebook/Text/CHM 文件 會以支援段落、標題(H1‑H6)、粗體、斜體、刪除線、行內程式碼、有序與無序列表(含巢狀)、表格(GFM 管道語法或 CommonMark 程式碼區塊備援)、超連結與圖像的方式呈現。
試算表 會以逐儲存格的格線遍歷、型別值格式化、工作表區段、欄/列截斷並以省略號指示、隱藏工作表過濾,以及自訂工作表分隔符的方式呈現。
靜態便利方法
一次性轉換方法會自動處理資源管理:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
非同步 API
非同步變體支援 CancellationToken:
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
無需轉換的文件檢查
取得文件元資料而不執行完整轉換:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
Markdown 方言控制
針對特定 Markdown 方言:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // pipe tables, strikethrough
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables as code blocks
試算表渲染選項
完整控制試算表如何渲染為 Markdown:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
標題層級偏移與 YAML 前置資料
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // prepend YAML metadata
};
轉換警告與統一錯誤模型
所有 Convert() 方法現在在失敗時拋出例外。ConvertResult 會攜帶非致命警告:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // e.g. "Worksheet 'Data' truncated at 50 rows."
圖像替換與相對路徑
在轉換期間替換圖像並控制路徑引用:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
目錄渲染
含目錄的文件會以乾淨的清單呈現,而非原始欄位代碼:
- Introduction
- 1. Executive Summary
- 2. Company Overview
程式碼範例
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
如何取得更新
NuGet
透過 NuGet 升級至最新的 GroupDocs.Markdown 套件(例如,Install-Package GroupDocs.Markdown)。