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

Metode statis baru pada 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

Metode instance baru pada MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() and overloads

Properti baru pada ConvertOptions

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

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

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

Sumber Daya