Kami dengan senang hati mengumumkan rilis GroupDocs.Markdown for .NET 26.3, tersedia sejak Maret 2026. Pembaruan utama ini memperkenalkan API publik yang dirancang ulang, renderer Markdown berbasis DOM khusus, kontrol penuh terhadap varian Markdown, dukungan async, dan serangkaian perbaikan bug. Selain itu, rilis ini menambahkan paket NuGet runtime per‑TFM dan dukungan untuk .NET 8 serta .NET 10.
What’s new in this release
| Kunci | Kategori | Ringkasan |
|---|---|---|
| MARKDOWNNET-33 | Fitur | Membagi paket NuGet menjadi paket runtime per‑TFM |
| MARKDOWNNET-31 | Fitur | Menambahkan dukungan untuk .NET 8 dan .NET 10 |
| MARKDOWNNET-30 | Fitur | Renderer Markdown berbasis DOM khusus |
| MARKDOWNNET-29 | Fitur | Peringatan konversi dan model error terpadu |
| MARKDOWNNET-28 | Fitur | Path gambar relatif dan penggantian gambar |
| MARKDOWNNET-27 | Fitur | Offset level heading dan pembuatan front matter YAML |
| MARKDOWNNET-26 | Fitur | Kontrol varian Markdown dan opsi rendering spreadsheet |
| MARKDOWNNET-25 | Fitur | Inspeksi dokumen tanpa konversi |
| MARKDOWNNET-24 | Fitur | API async |
| MARKDOWNNET-23 | Fitur | Metode statis yang memudahkan dan penemuan format |
| MARKDOWNNET-20 | Peningkatan | Meninjau dan merancang ulang API |
| MARKDOWNNET-8 | Fitur | Dukungan untuk mengganti gambar selama konversi ke Markdown |
| MARKDOWNNET-35 | Perbaikan Bug | Masalah kualitas dan fungsional |
Public API changes
New public types
DocumentInfo— metadata dokumen (format, jumlah halaman, judul, penulis, status enkripsi)MarkdownFlavor— enum untuk dialek Markdown target (GitHub, CommonMark)IImageSavingHandler— interface untuk callback penyimpanan gambar kustomIUriSavingHandler— interface untuk callback penyimpanan URI kustomGroupDocsMarkdownException— exception konversi umumInvalidFormatException— format file rusak atau tidak dikenaliDocumentProtectedException— kata sandi salah atau tidak ada
New static methods on MarkdownConverter
ToMarkdown(string sourcePath)and overloads withLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)and overloadsGetInfo(string sourcePath)and overloadsGetSupportedFormats()- Async variants:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
New instance methods on MarkdownConverter
GetDocumentInfo()ConvertAsync()and overloads
New properties on ConvertOptions
ImageExportStrategy(replacesExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
New properties on ConvertResult
Warnings— peringatan konversi yang tidak fatal
New properties on ExportImagesToFileSystemStrategy and CustomImagesStrategy
ImagesRelativePath— mengontrol path yang ditulis dalam referensi gambar Markdown
New methods on CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— mengganti konten gambar
Removed types
IExportStrategy— digantikan olehIImageExportStrategydanIUriExportStrategyDocumentConverterOptions— diganti nama menjadiConvertOptionsDocumentConverterResult— diganti nama menjadiConvertResult
Breaking changes
Renamed Types
| Sebelum | Sesudah |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
FileFormat Enum
Nilai tingkat keluarga (FileFormat.WordProcessing, FileFormat.Spreadsheet) digantikan dengan format spesifik (FileFormat.Docx, FileFormat.Xlsx, dll.). Entri baru: FileFormat.Txt, FileFormat.Chm.
ConvertOptions and LoadOptions separated
ConvertOptions tidak lagi mewarisi LoadOptions. Kata sandi dan petunjuk format ditempatkan pada 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);
Image and URI strategies split
Properti ExportStrategy tunggal digantikan dengan dua properti bertipe:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
Delegates replaced with interfaces
CustomImagesStrategy dan CustomUriExportStrategy kini menerima antarmuka IImageSavingHandler dan IUriSavingHandler alih-alih callback delegate.
LoadOptions.Extension and LoadOptions.MimeType are internal
Gunakan new LoadOptions(FileFormat.Docx) alih-alih mengatur Extension atau MimeType secara langsung.
New features
Custom DOM‑Based Markdown Renderer
Perpustakaan tidak lagi menyerahkan pembuatan Markdown ke ekspor pihak ketiga. Renderer khusus berjalan melalui model objek dokumen node demi node dan menghasilkan Markdown secara langsung, memberikan kontrol penuh atas setiap aspek output.
Dokumen Word/PDF/Ebook/Teks/CHM dirender dengan dukungan untuk paragraf, heading (H1‑H6), tebal, miring, coret, kode inline, daftar berurutan dan tidak berurutan dengan nesting, tabel (sintaks pipa GFM atau fallback blok kode CommonMark), hyperlink, dan gambar.
Spreadsheet dirender dengan penelusuran grid sel per sel, pemformatan nilai bertipe, bagian lembar kerja, pemotongan kolom/baris dengan indikator elipsis, penyaringan lembar tersembunyi, dan pemisah lembar khusus.
Static Convenience Methods
Metode konversi satu baris yang menangani manajemen sumber daya secara otomatis:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
Async API
Versi async untuk semua metode statis dan instance dengan dukungan CancellationToken:
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
Document Inspection Without Conversion
Mengambil metadata dokumen tanpa melakukan konversi penuh:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
Markdown Flavor Control
Menargetkan dialek Markdown tertentu:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // pipe tables, strikethrough
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables as code blocks
Spreadsheet Rendering Options
Kontrol penuh atas cara spreadsheet dirender ke Markdown:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
Heading Level Offset and YAML Front Matter
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // prepend YAML metadata
};
Conversion Warnings and Unified Error Model
Semua metode Convert() kini melempar exception saat gagal. ConvertResult membawa peringatan yang tidak fatal:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // e.g. "Worksheet 'Data' truncated at 50 rows."
Image Replacement and Relative Paths
Ganti gambar selama konversi dan kontrol referensi path:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
Table of Contents Rendering
Dokumen dengan Daftar Isi dirender sebagai daftar bersih alih-alih kode bidang mentah:
- Introduction
- 1. Executive Summary
- 2. Company Overview
Code example
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
How to get the update
NuGet
Tingkatkan ke paket GroupDocs.Markdown terbaru melalui NuGet (misalnya, Install-Package GroupDocs.Markdown).