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 immagineIUriSavingHandler— interfaccia per callback personalizzate di salvataggio URIGroupDocsMarkdownException— eccezione generale di conversioneInvalidFormatException— formato file corrotto o non riconosciutoDocumentProtectedException— password errata o mancante
Nuovi metodi statici su MarkdownConverter
ToMarkdown(string sourcePath)e overload conLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)e overloadGetInfo(string sourcePath)e overloadGetSupportedFormats()- Varianti asincrone:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
Nuovi metodi di istanza su MarkdownConverter
GetDocumentInfo()ConvertAsync()e overload
Nuove proprietà su ConvertOptions
ImageExportStrategy(sostituisceExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,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 daIImageExportStrategyeIUriExportStrategyDocumentConverterOptions— rinominato inConvertOptionsDocumentConverterResult— rinominato inConvertResult
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" // 
};
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).