Nos complace anunciar el lanzamiento de GroupDocs.Markdown for .NET 26.3, disponible a partir de marzo 2026. Esta actualización importante introduce una API pública rediseñada, un renderizador de Markdown basado en DOM personalizado, control total del sabor de Markdown, soporte async y una serie de correcciones de errores. También agrega paquetes NuGet de tiempo de ejecución por TFM y soporte para .NET 8 y .NET 10.
Novedades en esta versión
| Clave | Categoría | Resumen |
|---|---|---|
| MARKDOWNNET-33 | Funcionalidad | Dividir el paquete NuGet en paquetes de tiempo de ejecución por TFM |
| MARKDOWNNET-31 | Funcionalidad | Agregar soporte para .NET 8 y .NET 10 |
| MARKDOWNNET-30 | Funcionalidad | Renderizador de Markdown basado en DOM personalizado |
| MARKDOWNNET-29 | Funcionalidad | Advertencias de conversión y modelo de error unificado |
| MARKDOWNNET-28 | Funcionalidad | Rutas de imagen relativas y reemplazo de imágenes |
| MARKDOWNNET-27 | Funcionalidad | Desplazamiento de nivel de encabezado y generación de front matter YAML |
| MARKDOWNNET-26 | Funcionalidad | Control del sabor de Markdown y opciones de renderizado de hojas de cálculo |
| MARKDOWNNET-25 | Funcionalidad | Inspección de documento sin conversión |
| MARKDOWNNET-24 | Funcionalidad | API async |
| MARKDOWNNET-23 | Funcionalidad | Métodos estáticos de conveniencia y descubrimiento de formatos |
| MARKDOWNNET-20 | Mejora | Revisar y rediseñar la API |
| MARKDOWNNET-8 | Funcionalidad | Soporte para reemplazar imágenes durante la conversión a Markdown |
| MARKDOWNNET-35 | Corrección de error | Problemas de calidad y funcionales |
Cambios en la API pública
Nuevos tipos públicos
DocumentInfo— metadatos del documento (formato, número de páginas, título, autor, estado de cifrado)MarkdownFlavor— enum para el dialecto de Markdown objetivo (GitHub, CommonMark)IImageSavingHandler— interfaz para devoluciones de llamada personalizadas de guardado de imágenesIUriSavingHandler— interfaz para devoluciones de llamada personalizadas de guardado de URIGroupDocsMarkdownException— excepción general de conversiónInvalidFormatException— formato de archivo corrupto o no reconocidoDocumentProtectedException— contraseña incorrecta o ausente
Nuevos métodos estáticos en MarkdownConverter
ToMarkdown(string sourcePath)y sobrecargas conLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)y sobrecargasGetInfo(string sourcePath)y sobrecargasGetSupportedFormats()- Variantes async:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
Nuevos métodos de instancia en MarkdownConverter
GetDocumentInfo()ConvertAsync()y sobrecargas
Nuevas propiedades en ConvertOptions
ImageExportStrategy(reemplazaExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
Nuevas propiedades en ConvertResult
Warnings— advertencias de conversión no fatales
Nuevas propiedades en ExportImagesToFileSystemStrategy y CustomImagesStrategy
ImagesRelativePath— controla la ruta escrita en las referencias de imagen de Markdown
Nuevos métodos en CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— sustituye el contenido de la imagen
Tipos eliminados
IExportStrategy— reemplazado porIImageExportStrategyyIUriExportStrategyDocumentConverterOptions— renombrado aConvertOptionsDocumentConverterResult— renombrado aConvertResult
Cambios incompatibles
Tipos renombrados
| Antes | Después |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
Enum FileFormat
Los valores a nivel de familia (FileFormat.WordProcessing, FileFormat.Spreadsheet) son reemplazados por formatos específicos (FileFormat.Docx, FileFormat.Xlsx, etc.). Nuevas entradas: FileFormat.Txt, FileFormat.Chm.
ConvertOptions y LoadOptions separadas
ConvertOptions ya no hereda de LoadOptions. La contraseña y las pistas de formato van en 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);
Estrategias de imagen y URI divididas
La única propiedad ExportStrategy se reemplaza con dos propiedades tipadas:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
Delegados reemplazados por interfaces
CustomImagesStrategy y CustomUriExportStrategy ahora aceptan interfaces IImageSavingHandler y IUriSavingHandler en lugar de devoluciones de llamada de delegados.
LoadOptions.Extension y LoadOptions.MimeType son internos
Use new LoadOptions(FileFormat.Docx) en lugar de establecer Extension o MimeType directamente.
Nuevas funcionalidades
Renderizador de Markdown basado en DOM personalizado
La biblioteca ya no delega la generación de Markdown a una exportación de terceros. Un renderizador personalizado recorre el modelo de objetos del documento nodo por nodo y produce Markdown directamente, proporcionando control total sobre cada aspecto del resultado.
Documentos Word/PDF/Ebook/Text/CHM se renderizan con soporte para párrafos, encabezados (H1‑H6), negrita, cursiva, tachado, código en línea, listas ordenadas y desordenadas con anidamiento, tablas (sintaxis de tubería GFM o bloque de código CommonMark como alternativa), hipervínculos e imágenes.
Hojas de cálculo se renderizan con recorrido de cuadrícula celda por celda, formato de valores tipados, secciones de hoja de trabajo, truncamiento de columnas/filas con indicadores de elipsis, filtrado de hojas ocultas y separadores de hoja personalizados.
Métodos estáticos de conveniencia
Métodos de conversión de una sola línea que manejan la gestión de recursos automáticamente:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
API async
Contrapartes async para todos los métodos estáticos y de instancia con soporte de CancellationToken:
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
Inspección de documento sin conversión
Recupera los metadatos del documento sin realizar una conversión completa:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
Control del sabor de Markdown
Apunta a un dialecto específico de Markdown:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // tablas con tubería, tachado
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tablas como bloques de código
Opciones de renderizado de hojas de cálculo
Control total sobre cómo se renderizan las hojas de cálculo a Markdown:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
Desplazamiento de nivel de encabezado y front matter YAML
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // prepend YAML metadata
};
Advertencias de conversión y modelo de error unificado
Todos los métodos Convert() ahora lanzan excepciones en caso de fallo. ConvertResult contiene advertencias no fatales:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // e.g. "Worksheet 'Data' truncated at 50 rows."
Reemplazo de imágenes y rutas relativas
Reemplaza imágenes durante la conversión y controla las referencias de ruta:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
Renderizado de tabla de contenidos
Los documentos con tabla de contenidos se renderizan como listas limpias en lugar de códigos de campo sin procesar:
- Introduction
- 1. Executive Summary
- 2. Company Overview
Ejemplo de código
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
Cómo obtener la actualización
NuGet
Actualiza al último paquete GroupDocs.Markdown a través de NuGet (p. ej., Install-Package GroupDocs.Markdown).