我們很高興宣布 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()
  • 非同步變體:ToMarkdownAsyncToFileAsyncGetInfoAsync

MarkdownConverter 的新實例方法

  • GetDocumentInfo()
  • ConvertAsync() 以及重載

ConvertOptions 的新屬性

  • ImageExportStrategy(取代 ExportStrategy
  • UriExportStrategy
  • HeadingLevelOffset
  • IncludeFrontMatter
  • Flavor
  • MaxColumnsMaxRowsSheetSeparatorIncludeHiddenSheets

ConvertResult 的新屬性

  • Warnings — 非致命的轉換警告

ExportImagesToFileSystemStrategyCustomImagesStrategy 的新屬性

  • ImagesRelativePath — 控制 Markdown 圖像引用中寫入的路徑

CustomImageSavingArgs 的新方法

  • SetReplacementImage(Stream imageStream) — 替換圖像內容

已移除的類型

  • IExportStrategy — 已被 IImageExportStrategyIUriExportStrategy 取代
  • DocumentConverterOptions — 已重新命名為 ConvertOptions
  • DocumentConverterResult — 已重新命名為 ConvertResult

重大變更

已重新命名的類型

之前 之後
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

FileFormat 列舉

家族層級的值(FileFormat.WordProcessingFileFormat.Spreadsheet)已被具體格式(FileFormat.DocxFileFormat.Xlsx 等)取代。新增條目:FileFormat.TxtFileFormat.Chm

ConvertOptionsLoadOptions 分離

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)
};

代理已被介面取代

CustomImagesStrategyCustomUriExportStrategy 現在接受 IImageSavingHandlerIUriSavingHandler 介面,而非委派回呼。

LoadOptions.ExtensionLoadOptions.MimeType 為內部成員

請使用 new LoadOptions(FileFormat.Docx),而不是直接設定 ExtensionMimeType

新功能

自訂基於 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"  // ![](images/img-001.png)
};

目錄渲染

含目錄的文件會以乾淨的清單呈現,而非原始欄位代碼:

- 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)。

資源