Siamo lieti di annunciare il rilascio di GroupDocs.Markdown for .NET 26.3, disponibile a partire da marzo 2026. Questo importante aggiornamento introduce un’API pubblica ridisegnata, un renderer Markdown personalizzato basato su DOM, il controllo completo del dialetto Markdown, supporto asincrono e una serie di correzioni di bug. Aggiunge inoltre pacchetti runtime NuGet per TFM specifici e il supporto per .NET 8 e .NET 10.

Novità di questa versione

Chiave Categoria Riepilogo
MARKDOWNNET-33 Funzionalità Dividi il pacchetto NuGet in pacchetti runtime per TFM
MARKDOWNNET-31 Funzionalità Aggiungi il supporto per .NET 8 e .NET 10
MARKDOWNNET-30 Funzionalità Renderer Markdown personalizzato basato su DOM
MARKDOWNNET-29 Funzionalità Avvisi di conversione e modello di errore unificato
MARKDOWNNET-28 Funzionalità Percorsi immagine relativi e sostituzione delle immagini
MARKDOWNNET-27 Funzionalità Offset del livello di intestazione e generazione del front matter YAML
MARKDOWNNET-26 Funzionalità Controllo del dialetto Markdown e opzioni di rendering dei fogli di calcolo
MARKDOWNNET-25 Funzionalità Ispezione del documento senza conversione
MARKDOWNNET-24 Funzionalità API asincrona
MARKDOWNNET-23 Funzionalità Metodi statici di comodità e scoperta dei formati
MARKDOWNNET-20 Miglioramento Revisione e riprogettazione dell’API
MARKDOWNNET-8 Funzionalità Supporto per la sostituzione delle immagini durante la conversione in Markdown
MARKDOWNNET-35 Correzione di bug Problemi di qualità e funzionali

Modifiche all’API pubblica

Nuovi tipi pubblici

  • DocumentInfo — metadati del documento (formato, numero di pagine, titolo, autore, stato di crittografia)
  • MarkdownFlavor — enum per il dialetto Markdown di destinazione (GitHub, CommonMark)
  • IImageSavingHandler — interfaccia per callback personalizzate di salvataggio immagine
  • IUriSavingHandler — interfaccia per callback personalizzate di salvataggio URI
  • GroupDocsMarkdownException — eccezione generale di conversione
  • InvalidFormatException — formato file corrotto o non riconosciuto
  • DocumentProtectedException — password errata o mancante

Nuovi metodi statici su MarkdownConverter

  • ToMarkdown(string sourcePath) e overload con LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) e overload
  • GetInfo(string sourcePath) e overload
  • GetSupportedFormats()
  • Varianti asincrone: ToMarkdownAsync, ToFileAsync, GetInfoAsync

Nuovi metodi di istanza su MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() e overload

Nuove proprietà su ConvertOptions

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

Nuove proprietà su ConvertResult

  • Warnings — avvisi di conversione non fatali

Nuove proprietà su ExportImagesToFileSystemStrategy e CustomImagesStrategy

  • ImagesRelativePath — controlla il percorso scritto nei riferimenti immagine Markdown

Nuovi metodi su CustomImageSavingArgs

  • SetReplacementImage(Stream imageStream) — sostituisce il contenuto dell’immagine

Tipi rimossi

  • IExportStrategy — sostituito da IImageExportStrategy e IUriExportStrategy
  • DocumentConverterOptions — rinominato in ConvertOptions
  • DocumentConverterResult — rinominato in ConvertResult

Cambiamenti incompatibili

Tipi rinominati

Prima Dopo
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

Enum FileFormat

I valori a livello di famiglia (FileFormat.WordProcessing, FileFormat.Spreadsheet) sono sostituiti da formati specifici (FileFormat.Docx, FileFormat.Xlsx, ecc.). Nuove voci: FileFormat.Txt, FileFormat.Chm.

Separazione di ConvertOptions e LoadOptions

ConvertOptions non eredita più LoadOptions. Password e suggerimenti di formato vanno su 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);

Divisione delle strategie per immagini e URI

Singola proprietà ExportStrategy sostituita da due proprietà tipizzate:

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

Delegati sostituiti da interfacce

CustomImagesStrategy e CustomUriExportStrategy ora accettano le interfacce IImageSavingHandler e IUriSavingHandler invece dei callback delegati.

LoadOptions.Extension e LoadOptions.MimeType sono interni

Usa new LoadOptions(FileFormat.Docx) invece di impostare direttamente Extension o MimeType.

Nuove funzionalità

Renderer Markdown personalizzato basato su DOM

La libreria non delega più la generazione di Markdown a un’esportazione di terze parti. Un renderer personalizzato percorre il modello a oggetti del documento nodo per nodo e produce Markdown direttamente, fornendo pieno controllo su ogni aspetto dell’output.

Documenti Word/PDF/Ebook/Text/CHM vengono renderizzati con supporto per paragrafi, intestazioni (H1‑H6), grassetto, corsivo, barrato, codice inline, elenchi ordinati e non ordinati con nidificazione, tabelle (sintassi pipe GFM o fallback a blocco di codice CommonMark), collegamenti ipertestuali e immagini.

Fogli di calcolo vengono renderizzati con attraversamento della griglia cella per cella, formattazione dei valori tipizzati, sezioni di foglio di lavoro, troncamento di colonne/righe con indicatori di ellissi, filtraggio dei fogli nascosti e separatori di foglio personalizzati.

Metodi statici di comodità

Metodi di conversione a una riga che gestiscono automaticamente la gestione delle risorse:

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

API asincrona

Controparti asincrone per tutti i metodi statici e di istanza con supporto per CancellationToken:

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

Ispezione del documento senza conversione

Recupera i metadati del documento senza eseguire una conversione completa:

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

Controllo del dialetto Markdown

Target di un dialetto Markdown specifico:

var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // tabelle pipe, barrato
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tabelle come blocchi di codice

Opzioni di rendering dei fogli di calcolo

Pieno controllo su come i fogli di calcolo vengono renderizzati in Markdown:

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

Offset del livello di intestazione e front matter YAML

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

Avvisi di conversione e modello di errore unificato

Tutti i metodi Convert() ora lanciano eccezioni in caso di errore. ConvertResult trasporta avvisi non fatali:

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

Sostituzione delle immagini e percorsi relativi

Sostituisci le immagini durante la conversione e controlla i riferimenti di percorso:

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

Rendering del sommario

I documenti con sommario vengono renderizzati come elenchi puliti invece di codici di campo grezzi:

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

Esempio di codice

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

Come ottenere l’aggiornamento

NuGet

Aggiorna all’ultimo pacchetto GroupDocs.Markdown tramite NuGet (ad esempio, Install-Package GroupDocs.Markdown).

Risorse