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 kustom
  • IUriSavingHandler — interface untuk callback penyimpanan URI kustom
  • GroupDocsMarkdownException — exception konversi umum
  • InvalidFormatException — format file rusak atau tidak dikenali
  • DocumentProtectedException — kata sandi salah atau tidak ada

New static methods on MarkdownConverter

  • ToMarkdown(string sourcePath) and overloads with LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) and overloads
  • GetInfo(string sourcePath) and overloads
  • GetSupportedFormats()
  • Async variants: ToMarkdownAsync, ToFileAsync, GetInfoAsync

New instance methods on MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() and overloads

New properties on ConvertOptions

  • ImageExportStrategy (replaces ExportStrategy)
  • UriExportStrategy
  • HeadingLevelOffset
  • IncludeFrontMatter
  • Flavor
  • MaxColumns, 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 oleh IImageExportStrategy dan IUriExportStrategy
  • DocumentConverterOptions — diganti nama menjadi ConvertOptions
  • DocumentConverterResult — diganti nama menjadi ConvertResult

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

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

Resources