Kami dengan senang hati mengumumkan rilis GroupDocs.Markdown untuk .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, ditambahkan paket NuGet runtime per‑TFM dan dukungan untuk .NET 8 serta .NET 10.
Yang Baru dalam Rilis Ini
| 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 kesalahan terpadu |
| MARKDOWNNET-28 | Fitur | Path gambar relatif dan penggantian gambar |
| MARKDOWNNET-27 | Fitur | Offset tingkat 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 |
Perubahan API Publik
Tipe publik baru
DocumentInfo— metadata dokumen (format, jumlah halaman, judul, penulis, status enkripsi)MarkdownFlavor— enum untuk dialek Markdown target (GitHub, CommonMark)IImageSavingHandler— antarmuka untuk callback penyimpanan gambar khususIUriSavingHandler— antarmuka untuk callback penyimpanan URI khususGroupDocsMarkdownException— pengecualian konversi umumInvalidFormatException— format file rusak atau tidak dikenaliDocumentProtectedException— kata sandi salah atau tidak ada
Metode statis baru pada MarkdownConverter
ToMarkdown(string sourcePath)and overloads withLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)and overloadsGetInfo(string sourcePath)and overloadsGetSupportedFormats()- Async variants:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
Metode instance baru pada MarkdownConverter
GetDocumentInfo()ConvertAsync()and overloads
Properti baru pada ConvertOptions
ImageExportStrategy(replacesExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
Properti baru pada ConvertResult
Warnings— peringatan konversi non‑fatal
Properti baru pada ExportImagesToFileSystemStrategy dan CustomImagesStrategy
ImagesRelativePath— mengontrol path yang ditulis dalam referensi gambar Markdown
Metode baru pada CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— mengganti konten gambar
Tipe yang dihapus
IExportStrategy— digantikan olehIImageExportStrategydanIUriExportStrategyDocumentConverterOptions— diubah nama menjadiConvertOptionsDocumentConverterResult— diubah nama menjadiConvertResult
Perubahan yang Memecah
Tipe yang Diubah Nama
| Sebelum | Sesudah |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
Enum FileFormat
Nilai tingkat keluarga (FileFormat.WordProcessing, FileFormat.Spreadsheet) digantikan dengan format spesifik (FileFormat.Docx, FileFormat.Xlsx, dll.). Entri baru: FileFormat.Txt, FileFormat.Chm.
ConvertOptions dan LoadOptions dipisahkan
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);
Strategi gambar dan URI dipisah
Properti tunggal ExportStrategy digantikan dengan dua properti bertipe:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
Delegasi digantikan dengan antarmuka
CustomImagesStrategy dan CustomUriExportStrategy kini menerima antarmuka IImageSavingHandler dan IUriSavingHandler alih-alih callback delegasi.
LoadOptions.Extension dan LoadOptions.MimeType bersifat internal
Gunakan new LoadOptions(FileFormat.Docx) alih-alih mengatur Extension atau MimeType secara langsung.
Fitur Baru
Renderer Markdown Berbasis DOM Khusus
Perpustakaan tidak lagi mendelegasikan 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), tautan, dan gambar.
Spreadsheet dirender dengan penelusuran grid sel demi sel, pemformatan nilai bertipe, bagian lembar kerja, pemotongan kolom/baris dengan indikator elipsis, penyaringan lembar tersembunyi, dan pemisah lembar khusus.
Metode Statis yang Memudahkan
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();
API Async
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");
Inspeksi Dokumen Tanpa Konversi
Mengambil metadata dokumen tanpa melakukan konversi penuh:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
Kontrol Varian Markdown
Targetkan dialek Markdown tertentu:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // pipe tables, strikethrough
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables as code blocks
Opsi Rendering Spreadsheet
Kontrol penuh atas cara spreadsheet dirender ke Markdown:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
Offset Tingkat Heading dan Front Matter YAML
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // prepend YAML metadata
};
Peringatan Konversi dan Model Kesalahan Terpadu
Semua metode Convert() kini melempar pengecualian saat gagal. ConvertResult membawa peringatan non‑fatal:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // e.g. "Worksheet 'Data' truncated at 50 rows."
Penggantian Gambar dan Path Relatif
Ganti gambar selama konversi dan kontrol referensi path:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
Rendering Daftar Isi
Dokumen dengan Daftar Isi dirender sebagai daftar bersih alih-alih kode bidang mentah:
- Introduction
- 1. Executive Summary
- 2. Company Overview
Contoh Kode
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
Cara Mendapatkan Pembaruan
NuGet
Tingkatkan ke paket GroupDocs.Markdown terbaru melalui NuGet (misalnya, Install-Package GroupDocs.Markdown).