Z przyjemnością ogłaszamy wydanie GroupDocs.Markdown for .NET 26.3, dostępne od marca 2026. Ta duża aktualizacja wprowadza przeprojektowane publiczne API, własny renderer Markdown oparty na DOM, pełną kontrolę nad odmianą Markdown, obsługę async oraz szereg poprawek błędów. Dodaje także pakiety NuGet uruchamiane per‑TFM oraz wsparcie dla .NET 8 i .NET 10.

Co nowego w tej wersji

Klucz Kategoria Podsumowanie
MARKDOWNNET-33 Funkcja Podziel pakiet NuGet na pakiety uruchamiane per‑TFM
MARKDOWNNET-31 Funkcja Dodaj wsparcie dla .NET 8 i .NET 10
MARKDOWNNET-30 Funkcja Własny renderer Markdown oparty na DOM
MARKDOWNNET-29 Funkcja Ostrzeżenia konwersji i ujednolicony model błędów
MARKDOWNNET-28 Funkcja Względne ścieżki obrazów i zamiana obrazów
MARKDOWNNET-27 Funkcja Przesunięcie poziomu nagłówków i generowanie YAML front matter
MARKDOWNNET-26 Funkcja Kontrola odmiany Markdown i opcje renderowania arkuszy kalkulacyjnych
MARKDOWNNET-25 Funkcja Inspekcja dokumentu bez konwersji
MARKDOWNNET-24 Funkcja Asynchroniczne API
MARKDOWNNET-23 Funkcja Statyczne metody ułatwiające i wykrywanie formatów
MARKDOWNNET-20 Ulepszenie Przegląd i przeprojektowanie API
MARKDOWNNET-8 Funkcja Wsparcie dla zamiany obrazów podczas konwersji do Markdown
MARKDOWNNET-35 Bug Fix Problemy jakościowe i funkcjonalne

Zmiany w publicznym API

Nowe typy publiczne

  • DocumentInfo — metadane dokumentu (format, liczba stron, tytuł, autor, status szyfrowania)
  • MarkdownFlavor — enumeracja określająca docelową odmianę Markdown (GitHub, CommonMark)
  • IImageSavingHandler — interfejs dla niestandardowych wywołań zwrotnych zapisywania obrazów
  • IUriSavingHandler — interfejs dla niestandardowych wywołań zwrotnych zapisywania URI
  • GroupDocsMarkdownException — ogólny wyjątek konwersji
  • InvalidFormatException — uszkodzony lub nierozpoznany format pliku
  • DocumentProtectedException — nieprawidłowe lub brakujące hasło

Nowe metody statyczne w MarkdownConverter

  • ToMarkdown(string sourcePath) i przeciążenia z LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) i przeciążenia
  • GetInfo(string sourcePath) i przeciążenia
  • GetSupportedFormats()
  • Asynchroniczne warianty: ToMarkdownAsync, ToFileAsync, GetInfoAsync

Nowe metody instancyjne w MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() i przeciążenia

Nowe właściwości w ConvertOptions

  • ImageExportStrategy (zastępuje ExportStrategy)
  • UriExportStrategy
  • HeadingLevelOffset
  • IncludeFrontMatter
  • Flavor
  • MaxColumns, MaxRows, SheetSeparator, IncludeHiddenSheets

Nowe właściwości w ConvertResult

  • Warnings — ostrzeżenia konwersji niebędące krytycznymi błędami

Nowe właściwości w ExportImagesToFileSystemStrategy i CustomImagesStrategy

  • ImagesRelativePath — kontroluje ścieżkę zapisaną w odnośnikach obrazów w Markdown

Nowe metody w CustomImageSavingArgs

  • SetReplacementImage(Stream imageStream) — zastępuje zawartość obrazu

Usunięte typy

  • IExportStrategy — zastąpiono przez IImageExportStrategy i IUriExportStrategy
  • DocumentConverterOptions — zmieniono nazwę na ConvertOptions
  • DocumentConverterResult — zmieniono nazwę na ConvertResult

Zmiany łamiące kompatybilność

Zmienione nazwy typów

Przed Po
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

Enum FileFormat

Wartości poziomu rodziny (FileFormat.WordProcessing, FileFormat.Spreadsheet) zostały zastąpione konkretnymi formatami (FileFormat.Docx, FileFormat.Xlsx itp.). Dodano nowe pozycje: FileFormat.Txt, FileFormat.Chm.

ConvertOptions i LoadOptions rozdzielone

ConvertOptions nie dziedziczy już po LoadOptions. Hasło i wskazówki formatu umieszcza się w 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);

Strategie obrazów i URI podzielone

Jedna właściwość ExportStrategy została zastąpiona dwiema typowanymi właściwościami:

var options = new ConvertOptions
{
    ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
    UriExportStrategy = new CustomUriExportStrategy(handler)
};

Delegaty zastąpione interfejsami

CustomImagesStrategy i CustomUriExportStrategy teraz przyjmują interfejsy IImageSavingHandler i IUriSavingHandler zamiast wywołań zwrotnych delegatów.

LoadOptions.Extension i LoadOptions.MimeType są wewnętrzne

Użyj new LoadOptions(FileFormat.Docx) zamiast bezpośredniego ustawiania Extension lub MimeType.

Nowe funkcje

Własny renderer Markdown oparty na DOM

Biblioteka nie deleguje już generowania Markdown do zewnętrznego eksportu. Własny renderer przechodzi przez model obiektowy dokumentu węzeł po węźle i bezpośrednio generuje Markdown, zapewniając pełną kontrolę nad każdym aspektem wyjścia.

Dokumenty Word/PDF/Ebook/Text/CHM są renderowane z obsługą akapitów, nagłówków (H1‑H6), pogrubienia, kursywy, przekreślenia, kodu inline, list numerowanych i nienumerowanych z zagnieżdżeniem, tabel (składnia GFM pipe lub fallback do bloku kodu CommonMark), hiperłączy i obrazów.

Arkusze kalkulacyjne są renderowane z przeglądaniem siatki komórka po komórce, formatowaniem wartości typowanych, sekcjami arkuszy, przycinaniem kolumn/wierszy z wskaźnikami wielokropka, filtrowaniem ukrytych arkuszy i niestandardowymi separatorami arkuszy.

Statyczne metody ułatwiające

Metody konwersji jednowierszowe, które automatycznie zarządzają zasobami:

string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();

Asynchroniczne API

Metody asynchroniczne dla wszystkich metod statycznych i instancyjnych z obsługą CancellationToken:

string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");

Inspekcja dokumentu bez konwersji

Pobierz metadane dokumentu bez wykonywania pełnej konwersji:

DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");

Kontrola odmiany Markdown

Docelowa konkretna odmiana Markdown:

var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // pipe tables, strikethrough
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables as code blocks

Opcje renderowania arkuszy kalkulacyjnych

Pełna kontrola nad tym, jak arkusze kalkulacyjne są renderowane do Markdown:

var options = new ConvertOptions
{
    MaxColumns = 8,
    MaxRows = 50,
    SheetSeparator = "\n---\n",
    IncludeHiddenSheets = false
};

Przesunięcie poziomu nagłówków i YAML Front Matter

var options = new ConvertOptions
{
    HeadingLevelOffset = 2,       // # Title  ->  ### Title
    IncludeFrontMatter = true     // prepend YAML metadata
};

Ostrzeżenia konwersji i ujednolicony model błędów

All Convert() methods now throw on failure. ConvertResult carries non‑fatal warnings:

ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
    Console.WriteLine(w);  // e.g. "Worksheet 'Data' truncated at 50 rows."

Zamiana obrazów i ścieżki względne

Replace images during conversion and control path references:

var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
    ImagesRelativePath = "images"  // ![](images/img-001.png)
};

Renderowanie spisu treści

Documents with Table of Contents are rendered as clean lists instead of raw field codes:

- Introduction
- 1.  Executive Summary
- 2.  Company Overview

Przykład kodu

string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();

Jak uzyskać aktualizację

NuGet

Uaktualnij do najnowszego pakietu GroupDocs.Markdown za pomocą NuGet (np. Install-Package GroupDocs.Markdown).

Zasoby