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 imagens
  • IUriSavingHandler — interface para callbacks personalizados de salvamento de URIs
  • GroupDocsMarkdownException — exceção geral de conversão
  • InvalidFormatException — formato de arquivo corrompido ou não reconhecido
  • DocumentProtectedException — senha incorreta ou ausente

Novos métodos estáticos em MarkdownConverter

  • ToMarkdown(string sourcePath) e sobrecargas com LoadOptions/ConvertOptions
  • ToFile(string sourcePath, string outputPath) e sobrecargas
  • GetInfo(string sourcePath) e sobrecargas
  • GetSupportedFormats()
  • Variantes assíncronas: ToMarkdownAsync, ToFileAsync, GetInfoAsync

Novos métodos de instância em MarkdownConverter

  • GetDocumentInfo()
  • ConvertAsync() e sobrecargas

Novas propriedades em ConvertOptions

  • ImageExportStrategy (substitui ExportStrategy)
  • UriExportStrategy
  • HeadingLevelOffset
  • IncludeFrontMatter
  • Flavor
  • MaxColumns, 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 por IImageExportStrategy e IUriExportStrategy
  • DocumentConverterOptions — renomeado para ConvertOptions
  • DocumentConverterResult — renomeado para ConvertResult

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"  // ![](images/img-001.png)
};

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).

Recursos