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ówIUriSavingHandler— interfejs dla niestandardowych wywołań zwrotnych zapisywania URIGroupDocsMarkdownException— ogólny wyjątek konwersjiInvalidFormatException— uszkodzony lub nierozpoznany format plikuDocumentProtectedException— nieprawidłowe lub brakujące hasło
Nowe metody statyczne w MarkdownConverter
ToMarkdown(string sourcePath)i przeciążenia zLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)i przeciążeniaGetInfo(string sourcePath)i przeciążeniaGetSupportedFormats()- Asynchroniczne warianty:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
Nowe metody instancyjne w MarkdownConverter
GetDocumentInfo()ConvertAsync()i przeciążenia
Nowe właściwości w ConvertOptions
ImageExportStrategy(zastępujeExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,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 przezIImageExportStrategyiIUriExportStrategyDocumentConverterOptions— zmieniono nazwę naConvertOptionsDocumentConverterResult— zmieniono nazwę naConvertResult
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" // 
};
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).