Nous sommes heureux d’annoncer la sortie de GroupDocs.Markdown for .NET 26.3, disponible depuis mars 2026. Cette mise à jour majeure introduit une API publique repensée, un moteur de rendu Markdown basé sur le DOM personnalisé, un contrôle complet du dialecte Markdown, la prise en charge asynchrone et une série de corrections de bugs. Elle ajoute également des packages NuGet d’exécution par TFM et la prise en charge de .NET 8 et .NET 10.

Nouveautés de cette version

Clé Catégorie Résumé
MARKDOWNNET-33 Fonctionnalité Diviser le package NuGet en packages d’exécution par TFM
MARKDOWNNET-31 Fonctionnalité Ajouter la prise en charge de .NET 8 et .NET 10
MARKDOWNNET-30 Fonctionnalité Moteur de rendu Markdown personnalisé basé sur le DOM
MARKDOWNNET-29 Fonctionnalité Avertissements de conversion et modèle d’erreur unifié
MARKDOWNNET-28 Fonctionnalité Chemins d’image relatifs et remplacement d’image
MARKDOWNNET-27 Fonctionnalité Décalage du niveau des titres et génération du front matter YAML
MARKDOWNNET-26 Fonctionnalité Contrôle du dialecte Markdown et options de rendu des feuilles de calcul
MARKDOWNNET-25 Fonctionnalité Inspection du document sans conversion
MARKDOWNNET-24 Fonctionnalité API asynchrone
MARKDOWNNET-23 Fonctionnalité Méthodes statiques pratiques et découverte des formats
MARKDOWNNET-20 Amélioration Révision et refonte de l’API
MARKDOWNNET-8 Fonctionnalité Prise en charge du remplacement des images lors de la conversion en Markdown
MARKDOWNNET-35 Correction de bug Problèmes de qualité et fonctionnels

Modifications de l’API publique

Nouveaux types publics

  • DocumentInfo — métadonnées du document (format, nombre de pages, titre, auteur, statut de chiffrement)
  • MarkdownFlavor — énumération du dialecte Markdown cible (GitHub, CommonMark)
  • IImageSavingHandler — interface pour les rappels de sauvegarde d’image personnalisés
  • IUriSavingHandler — interface pour les rappels de sauvegarde d’URI personnalisés
  • GroupDocsMarkdownException — exception générale de conversion
  • InvalidFormatException — format de fichier corrompu ou non reconnu
  • DocumentProtectedException — mot de passe incorrect ou manquant

Nouvelles méthodes statiques sur MarkdownConverter

  • ToMarkdown(string sourcePath) et ses surcharges avec LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) et ses surcharges
  • GetInfo(string sourcePath) et ses surcharges
  • GetSupportedFormats()
  • Variantes asynchrones : ToMarkdownAsync, ToFileAsync, GetInfoAsync

Nouvelles méthodes d’instance sur MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() et ses surcharges

Nouvelles propriétés sur ConvertOptions

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

Nouvelles propriétés sur ConvertResult

  • Warnings — avertissements de conversion non fatals

Nouvelles propriétés sur ExportImagesToFileSystemStrategy et CustomImagesStrategy

  • ImagesRelativePath — contrôle le chemin écrit dans les références d’image Markdown

Nouvelles méthodes sur CustomImageSavingArgs

  • SetReplacementImage(Stream imageStream) — substituer le contenu de l’image

Types supprimés

  • IExportStrategy — remplacé par IImageExportStrategy et IUriExportStrategy
  • DocumentConverterOptions — renommé en ConvertOptions
  • DocumentConverterResult — renommé en ConvertResult

Changements majeurs

Types renommés

Avant Après
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

Enum FileFormat

Les valeurs de niveau famille (FileFormat.WordProcessing, FileFormat.Spreadsheet) sont remplacées par des formats spécifiques (FileFormat.Docx, FileFormat.Xlsx, etc.). Nouvelles entrées : FileFormat.Txt, FileFormat.Chm.

Séparation de ConvertOptions et LoadOptions

ConvertOptions n’hérite plus de LoadOptions. Le mot de passe et les indices de format sont placés sur 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);

Division des stratégies d’image et d’URI

La propriété unique ExportStrategy est remplacée par deux propriétés typées :

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

Les délégués remplacés par des interfaces

CustomImagesStrategy et CustomUriExportStrategy acceptent désormais les interfaces IImageSavingHandler et IUriSavingHandler au lieu de rappels de délégués.

LoadOptions.Extension et LoadOptions.MimeType sont internes

Utilisez new LoadOptions(FileFormat.Docx) au lieu de définir directement Extension ou MimeType.

Nouvelles fonctionnalités

Moteur de rendu Markdown personnalisé basé sur le DOM

La bibliothèque ne délègue plus la génération de Markdown à une exportation tierce. Un moteur de rendu personnalisé parcourt le modèle d’objet du document nœud par nœud et produit du Markdown directement, offrant un contrôle complet sur chaque aspect du résultat.

Documents Word/PDF/Ebook/Text/CHM sont rendus avec prise en charge des paragraphes, des titres (H1‑H6), du gras, de l’italique, du barré, du code en ligne, des listes ordonnées et non ordonnées avec imbrication, des tableaux (syntaxe GFM pipe ou repli sur un bloc de code CommonMark), des hyperliens et des images.

Feuilles de calcul sont rendues avec un parcours cellule par cellule de la grille, un formatage des valeurs typées, des sections de feuilles de calcul, une troncature des colonnes/ lignes avec indicateurs d’ellipse, un filtrage des feuilles cachées et des séparateurs de feuilles personnalisés.

Méthodes statiques pratiques

Des méthodes de conversion en une ligne qui gèrent automatiquement la gestion des ressources :

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

API asynchrone

Contreparties asynchrones pour toutes les méthodes statiques et d’instance avec prise en charge du CancellationToken :

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

Inspection du document sans conversion

Récupérez les métadonnées du document sans effectuer de conversion complète :

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

Contrôle du dialecte Markdown

Ciblez un dialecte Markdown spécifique :

var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // tables en pipe, barré
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables en blocs de code

Options de rendu des feuilles de calcul

Contrôle complet de la façon dont les feuilles de calcul sont rendues en Markdown :

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

Décalage du niveau des titres et front matter YAML

var options = new ConvertOptions
{
    HeadingLevelOffset = 2,       // # Title  ->  ### Title
    IncludeFrontMatter = true     // préfixer les métadonnées YAML
};

Avertissements de conversion et modèle d’erreur unifié

Toutes les méthodes Convert() lèvent désormais une exception en cas d’échec. ConvertResult contient des avertissements non fatals :

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

Remplacement d’image et chemins relatifs

Remplacez les images lors de la conversion et contrôlez les références de chemin :

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

Rendu de la table des matières

Les documents avec une table des matières sont rendus sous forme de listes propres au lieu de codes de champ bruts :

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

Exemple de code

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

Comment obtenir la mise à jour

NuGet

Mettez à jour vers le dernier package GroupDocs.Markdown via NuGet (par ex., Install-Package GroupDocs.Markdown).

Ressources