Jsme potěšeni, že můžeme oznámit vydání GroupDocs.Markdown for .NET 26.3, dostupné od března 2026. Toto hlavní vydání představuje přepracované veřejné API, vlastní renderer Markdown založený na DOM, plnou kontrolu nad variantou Markdown, podporu asynchronního zpracování a řadu oprav chyb. Také přidává runtime balíčky NuGet rozdělené podle TFM a podporu pro .NET 8 a .NET 10.

Co je nového v tomto vydání

Key Category Summary
MARKDOWNNET-33 Feature Rozdělení NuGet balíčku na runtime balíčky podle TFM
MARKDOWNNET-31 Feature Přidání podpory pro .NET 8 a .NET 10
MARKDOWNNET-30 Feature Vlastní renderer Markdown založený na DOM
MARKDOWNNET-29 Feature Varování při konverzi a sjednocený model chyb
MARKDOWNNET-28 Feature Relativní cesty k obrázkům a nahrazování obrázků
MARKDOWNNET-27 Feature Posun úrovně nadpisu a generování YAML front matter
MARKDOWNNET-26 Feature Kontrola varianty Markdown a možnosti renderování tabulek
MARKDOWNNET-25 Feature Inspekce dokumentu bez konverze
MARKDOWNNET-24 Feature Asynchronní API
MARKDOWNNET-23 Feature Statické pohodlné metody a zjišťování formátů
MARKDOWNNET-20 Enhancement Revize a redesign API
MARKDOWNNET-8 Feature Podpora nahrazování obrázků během konverze do Markdown
MARKDOWNNET-35 Bug Fix Problémy s kvalitou a funkčností

Změny ve veřejném API

Nové veřejné typy

  • DocumentInfo — metadata dokumentu (formát, počet stránek, název, autor, stav šifrování)
  • MarkdownFlavor — výčet pro cílový dialekt Markdown (GitHub, CommonMark)
  • IImageSavingHandler — rozhraní pro vlastní zpětná volání při ukládání obrázků
  • IUriSavingHandler — rozhraní pro vlastní zpětná volání při ukládání URI
  • GroupDocsMarkdownException — obecná výjimka při konverzi
  • InvalidFormatException — poškozený nebo neznámý formát souboru
  • DocumentProtectedException — špatné nebo chybějící heslo

Nové statické metody v MarkdownConverter

  • ToMarkdown(string sourcePath) a přetížení s LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) a přetížení
  • GetInfo(string sourcePath) a přetížení
  • GetSupportedFormats()
  • Asynchronní varianty: ToMarkdownAsync, ToFileAsync, GetInfoAsync

Nové instance metody v MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() a přetížení

Nové vlastnosti v ConvertOptions

  • ImageExportStrategy (nahrazuje ExportStrategy)
  • UriExportStrategy
  • HeadingLevelOffset
  • IncludeFrontMatter
  • Flavor
  • MaxColumns, MaxRows, SheetSeparator, IncludeHiddenSheets

Nové vlastnosti v ConvertResult

  • Warnings — nefatální varování při konverzi

Nové vlastnosti v ExportImagesToFileSystemStrategy a CustomImagesStrategy

  • ImagesRelativePath — určuje cestu zapsanou v odkazech na obrázky v Markdown

Nové metody v CustomImageSavingArgs

  • SetReplacementImage(Stream imageStream) — nahrazení obsahu obrázku

Odstraněné typy

  • IExportStrategy — nahrazeno IImageExportStrategy a IUriExportStrategy
  • DocumentConverterOptions — přejmenováno na ConvertOptions
  • DocumentConverterResult — přejmenováno na ConvertResult

Zlomové změny

Přejmenované typy

Before After
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

Výčet FileFormat

Hodnoty na úrovni rodiny (FileFormat.WordProcessing, FileFormat.Spreadsheet) jsou nahrazeny konkrétními formáty (FileFormat.Docx, FileFormat.Xlsx atd.). Nové položky: FileFormat.Txt, FileFormat.Chm.

ConvertOptions a LoadOptions odděleny

ConvertOptions již nezdědí LoadOptions. Heslo a nápovědy k formátu se uvádějí v 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 pro obrázky a URI rozděleny

Jedna vlastnost ExportStrategy je nahrazena dvěma typovými vlastnostmi:

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

Delegáty nahrazeny rozhraními

CustomImagesStrategy a CustomUriExportStrategy nyní přijímají rozhraní IImageSavingHandler a IUriSavingHandler místo delegátových zpětných volání.

LoadOptions.Extension a LoadOptions.MimeType jsou interní

Použijte new LoadOptions(FileFormat.Docx) místo přímého nastavení Extension nebo MimeType.

Nové funkce

Vlastní renderer Markdown založený na DOM

Knihovna již nedeleguje generování Markdown na třetí stranu. Vlastní renderer prochází model objektů dokumentu uzel po uzlu a přímo vytváří Markdown, což poskytuje plnou kontrolu nad každým aspektem výstupu.

Word/PDF/Ebook/Text/CHM dokumenty jsou renderovány s podporou odstavců, nadpisů (H1‑H6), tučného, kurzívy, přeškrtnutí, inline kódu, číslovaných i nečíslovaných seznamů s vnořením, tabulek (GFM syntaxe s rourami nebo fallback na kódový blok CommonMark), hypertextových odkazů a obrázků.

Tabulky jsou renderovány průchodem buňka po buňce, formátováním typovaných hodnot, sekcemi listů, ořezáváním sloupců/řádků s indikátory výpustky, filtrováním skrytých listů a vlastními oddělovači listů.

Statické pohodlné metody

Jednořádkové konverzní metody, které automaticky spravují zdroje:

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

Asynchronní API

Asynchronní protějšky všech statických i instančních metod s podporou CancellationToken:

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

Inspekce dokumentu bez konverze

Získání metadat dokumentu bez provádění úplné konverze:

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

Kontrola varianty Markdown

Cílení na konkrétní dialekt Markdown:

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

Možnosti renderování tabulek

Plná kontrola nad tím, jak jsou tabulky renderovány do Markdown:

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

Posun úrovně nadpisu a YAML front matter

var options = new ConvertOptions
{
    HeadingLevelOffset = 2,       // # Title  ->  ### Title
    IncludeFrontMatter = true     // přidá YAML metadata na začátek
};

Varování při konverzi a sjednocený model chyb

Všechny metody Convert() nyní hází výjimku při selhání. ConvertResult nese nefatální varování:

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

Nahrazování obrázků a relativní cesty

Nahraďte obrázky během konverze a ovládejte reference na cesty:

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

Renderování obsahu Tabulky obsahu

Dokumenty s Tabulkou obsahu jsou renderovány jako čisté seznamy místo surových kódových polí:

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

Příklad kódu

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

Jak získat aktualizaci

NuGet

Aktualizujte na nejnovější balíček GroupDocs.Markdown přes NuGet (např. Install-Package GroupDocs.Markdown).

Zdroje