Temos o prazer de anunciar o lançamento do GroupDocs.Markdown for .NET 26.3, disponível a partir de março 2026. Esta atualização importante introduz uma API pública redesenhada, um renderizador Markdown baseado em DOM personalizado, controle total do sabor do Markdown, suporte assíncrono e uma série de correções de bugs. Também adiciona pacotes NuGet de tempo de execução por TFM e suporte ao .NET 8 e .NET 10.
O que há de novo nesta versão
| Chave | Categoria | Resumo |
|---|---|---|
| MARKDOWNNET-33 | Recurso | Dividir o pacote NuGet em pacotes de tempo de execução por TFM |
| MARKDOWNNET-31 | Recurso | Adicionar suporte ao .NET 8 e .NET 10 |
| MARKDOWNNET-30 | Recurso | Renderizador Markdown baseado em DOM personalizado |
| MARKDOWNNET-29 | Recurso | Avisos de conversão e modelo de erro unificado |
| MARKDOWNNET-28 | Recurso | Caminhos de imagem relativos e substituição de imagens |
| MARKDOWNNET-27 | Recurso | Deslocamento de nível de cabeçalho e geração de front matter YAML |
| MARKDOWNNET-26 | Recurso | Controle de sabor do Markdown e opções de renderização de planilhas |
| MARKDOWNNET-25 | Recurso | Inspeção de documento sem conversão |
| MARKDOWNNET-24 | Recurso | API assíncrona |
| MARKDOWNNET-23 | Recurso | Métodos estáticos de conveniência e descoberta de formatos |
| MARKDOWNNET-20 | Melhoria | Revisar e redesenhar a API |
| MARKDOWNNET-8 | Recurso | Suporte à substituição de imagens durante a conversão para Markdown |
| MARKDOWNNET-35 | Correção de Bug | Problemas de qualidade e funcionais |
Alterações na API pública
Novos tipos públicos
DocumentInfo— metadados do documento (formato, contagem de páginas, título, autor, status de criptografia)MarkdownFlavor— enum para dialeto Markdown alvo (GitHub, CommonMark)IImageSavingHandler— interface para callbacks personalizados de salvamento de imagensIUriSavingHandler— interface para callbacks personalizados de salvamento de URIsGroupDocsMarkdownException— exceção geral de conversãoInvalidFormatException— formato de arquivo corrompido ou não reconhecidoDocumentProtectedException— senha incorreta ou ausente
Novos métodos estáticos em MarkdownConverter
ToMarkdown(string sourcePath)e sobrecargas comLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)e sobrecargasGetInfo(string sourcePath)e sobrecargasGetSupportedFormats()- Variantes assíncronas:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
Novos métodos de instância em MarkdownConverter
GetDocumentInfo()ConvertAsync()e sobrecargas
Novas propriedades em ConvertOptions
ImageExportStrategy(substituiExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
Novas propriedades em ConvertResult
Warnings— avisos de conversão não fatais
Novas propriedades em ExportImagesToFileSystemStrategy e CustomImagesStrategy
ImagesRelativePath— controla o caminho escrito nas referências de imagem do Markdown
Novos métodos em CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— substitui o conteúdo da imagem
Tipos removidos
IExportStrategy— substituído porIImageExportStrategyeIUriExportStrategyDocumentConverterOptions— renomeado paraConvertOptionsDocumentConverterResult— renomeado paraConvertResult
Quebras de compatibilidade
Tipos renomeados
| Antes | Depois |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
Enum FileFormat
Os valores de nível de família (FileFormat.WordProcessing, FileFormat.Spreadsheet) são substituídos por formatos específicos (FileFormat.Docx, FileFormat.Xlsx, etc.). Novas entradas: FileFormat.Txt, FileFormat.Chm.
ConvertOptions e LoadOptions separados
ConvertOptions não herda mais LoadOptions. Senha e dicas de formato vão em 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);
Estratégias de imagem e URI divididas
A propriedade única ExportStrategy foi substituída por duas propriedades tipadas:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
Delegados substituídos por interfaces
CustomImagesStrategy e CustomUriExportStrategy agora aceitam as interfaces IImageSavingHandler e IUriSavingHandler em vez de callbacks de delegate.
LoadOptions.Extension e LoadOptions.MimeType são internos
Use new LoadOptions(FileFormat.Docx) em vez de definir Extension ou MimeType diretamente.
Novos recursos
Renderizador Markdown baseado em DOM personalizado
A biblioteca não delega mais a geração de Markdown a um exportador de terceiros. Um renderizador personalizado percorre o modelo de objeto do documento nó a nó e produz Markdown diretamente, proporcionando controle total sobre cada aspecto da saída.
Documentos Word/PDF/Ebook/Text/CHM são renderizados com suporte a parágrafos, cabeçalhos (H1‑H6), negrito, itálico, tachado, código embutido, listas ordenadas e não ordenadas com aninhamento, tabelas (sintaxe de pipe GFM ou fallback para bloco de código CommonMark), hyperlinks e imagens.
Planilhas são renderizadas com travessia de grade célula a célula, formatação de valores tipados, seções de planilha, truncamento de colunas/linhas com indicadores de elipse, filtragem de planilhas ocultas e separadores de planilha personalizados.
Métodos estáticos de conveniência
Métodos de conversão de uma linha que gerenciam recursos automaticamente:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
API assíncrona
Contrapartes assíncronas para todos os métodos estáticos e de instância com suporte a CancellationToken:
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
Inspeção de documento sem conversão
Recupere metadados do documento sem executar uma conversão completa:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
Controle de sabor do Markdown
Alveje um dialeto Markdown específico:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // tabelas pipe, tachado
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tabelas como blocos de código
Opções de renderização de planilhas
Controle total sobre como as planilhas são renderizadas para Markdown:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
Deslocamento de nível de cabeçalho e front matter YAML
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // prepend YAML metadata
};
Avisos de conversão e modelo de erro unificado
Todos os métodos Convert() agora lançam exceção em caso de falha. ConvertResult contém avisos não fatais:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // e.g. "Worksheet 'Data' truncated at 50 rows."
Substituição de imagens e caminhos relativos
Substitua imagens durante a conversão e controle as referências de caminho:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
Renderização de sumário
Documentos com Sumário são renderizados como listas limpas em vez de códigos de campo brutos:
- Introduction
- 1. Executive Summary
- 2. Company Overview
Exemplo de código
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
Como obter a atualização
NuGet
Atualize para o pacote GroupDocs.Markdown mais recente via NuGet (por exemplo, Install-Package GroupDocs.Markdown).