우리는 GroupDocs.Markdown for .NET 26.3의 출시를 기쁘게 발표합니다. 이 버전은 2026년 3월부터 사용할 수 있습니다. 이번 주요 업데이트에서는 재설계된 공개 API, 사용자 정의 DOM 기반 Markdown 렌더러, 전체 Markdown 방언 제어, 비동기 지원 및 다양한 버그 수정이 포함되었습니다. 또한 per‑TFM 런타임 NuGet 패키지와 .NET 8 및 .NET 10 지원이 추가되었습니다.

이번 릴리스의 새로운 기능

카테고리 요약
MARKDOWNNET-33 기능 per‑TFM 런타임 패키지로 NuGet 패키지를 분할
MARKDOWNNET-31 기능 .NET 8 및 .NET 10 지원 추가
MARKDOWNNET-30 기능 사용자 정의 DOM 기반 Markdown 렌더러
MARKDOWNNET-29 기능 변환 경고 및 통합 오류 모델
MARKDOWNNET-28 기능 상대 이미지 경로 및 이미지 교체
MARKDOWNNET-27 기능 헤딩 레벨 오프셋 및 YAML 프런트 매터 생성
MARKDOWNNET-26 기능 Markdown 방언 제어 및 스프레드시트 렌더링 옵션
MARKDOWNNET-25 기능 변환 없이 문서 검사
MARKDOWNNET-24 기능 비동기 API
MARKDOWNNET-23 기능 정적 편리 메서드 및 포맷 탐색
MARKDOWNNET-20 향상 API 검토 및 재설계
MARKDOWNNET-8 기능 Markdown 변환 중 이미지 교체 지원
MARKDOWNNET-35 버그 수정 품질 및 기능 문제 해결

공개 API 변경 사항

새로운 공개 타입

  • DocumentInfo — 문서 메타데이터(포맷, 페이지 수, 제목, 저자, 암호화 상태)
  • MarkdownFlavor — 대상 Markdown 방언을 위한 열거형(GitHub, CommonMark)
  • IImageSavingHandler — 사용자 정의 이미지 저장 콜백을 위한 인터페이스
  • IUriSavingHandler — 사용자 정의 URI 저장 콜백을 위한 인터페이스
  • GroupDocsMarkdownException — 일반 변환 예외
  • InvalidFormatException — 손상되었거나 인식되지 않은 파일 포맷
  • DocumentProtectedException — 잘못된 비밀번호 또는 비밀번호 누락

MarkdownConverter의 새로운 정적 메서드

  • ToMarkdown(string sourcePath)LoadOptions/ConvertOptions 오버로드
  • ToFile(string sourcePath, string outputPath) 및 오버로드
  • GetInfo(string sourcePath) 및 오버로드
  • GetSupportedFormats()
  • 비동기 변형: ToMarkdownAsync, ToFileAsync, GetInfoAsync

MarkdownConverter의 새로운 인스턴스 메서드

  • GetDocumentInfo()
  • ConvertAsync() 및 오버로드

ConvertOptions의 새로운 속성

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

ConvertResult의 새로운 속성

  • Warnings — 비치명적 변환 경고

ExportImagesToFileSystemStrategyCustomImagesStrategy의 새로운 속성

  • ImagesRelativePath — Markdown 이미지 참조에 기록되는 경로를 제어

CustomImageSavingArgs의 새로운 메서드

  • SetReplacementImage(Stream imageStream) — 이미지 콘텐츠 교체

제거된 타입

  • IExportStrategyIImageExportStrategyIUriExportStrategy 로 대체
  • DocumentConverterOptionsConvertOptions 로 이름 변경
  • DocumentConverterResultConvertResult 로 이름 변경

호환성 깨지는 변경 사항

이름이 변경된 타입

이전 이후
DocumentConverterOptions ConvertOptions
DocumentConverterResult ConvertResult

FileFormat 열거형

패밀리 수준 값(FileFormat.WordProcessing, FileFormat.Spreadsheet)은 특정 포맷(FileFormat.Docx, FileFormat.Xlsx 등)으로 대체됩니다. 새로운 항목: FileFormat.Txt, FileFormat.Chm.

ConvertOptionsLoadOptions 분리

ConvertOptions는 더 이상 LoadOptions를 상속하지 않습니다. 비밀번호와 포맷 힌트는 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);

이미지 및 URI 전략 분리

단일 ExportStrategy 속성이 두 개의 타입화된 속성으로 대체되었습니다:

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

대리자(Delegate)가 인터페이스로 교체

CustomImagesStrategyCustomUriExportStrategy는 이제 대리자 콜백 대신 IImageSavingHandlerIUriSavingHandler 인터페이스를 사용합니다.

LoadOptions.ExtensionLoadOptions.MimeType은 내부

Extension이나 MimeType을 직접 설정하는 대신 new LoadOptions(FileFormat.Docx)를 사용하십시오.

새로운 기능

사용자 정의 DOM 기반 Markdown 렌더러

이 라이브러리는 더 이상 Markdown 생성을 타사 익스포트에 위임하지 않습니다. 사용자 정의 렌더러가 문서 객체 모델을 노드 단위로 순회하며 직접 Markdown을 생성하므로 출력의 모든 측면을 완벽하게 제어할 수 있습니다.

Word/PDF/Ebook/Text/CHM 문서는 단락, 헤딩(H1‑H6), 굵게, 기울임, 취소선, 인라인 코드, 중첩 가능한 순서 및 무순서 목록, 표(GFM 파이프 구문 또는 CommonMark 코드 블록 대체), 하이퍼링크 및 이미지 지원으로 렌더링됩니다.

스프레드시트는 셀 단위 그리드 순회, 타입별 값 포맷팅, 워크시트 섹션, 열/행 절단(생략 부호 표시), 숨김 시트 필터링 및 사용자 정의 시트 구분자를 사용해 렌더링됩니다.

정적 편리 메서드

리소스 관리를 자동으로 처리하는 한 줄 변환 메서드:

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

비동기 API

CancellationToken 지원을 포함한 모든 정적 및 인스턴스 메서드의 비동기 대응 메서드:

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

변환 없이 문서 검사

전체 변환을 수행하지 않고 문서 메타데이터를 가져옵니다:

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

Markdown 방언 제어

특정 Markdown 방언을 목표로 합니다:

var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // pipe tables, strikethrough
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // tables as code blocks

스프레드시트 렌더링 옵션

스프레드시트가 Markdown으로 렌더링되는 방식을 완전히 제어합니다:

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

헤딩 레벨 오프셋 및 YAML 프런트 매터

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

변환 경고 및 통합 오류 모델

모든 Convert() 메서드는 이제 실패 시 예외를 발생합니다. ConvertResult는 비치명적 경고를 포함합니다:

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

이미지 교체 및 상대 경로

변환 중 이미지를 교체하고 경로 참조를 제어합니다:

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

목차 렌더링

목차가 포함된 문서는 원시 필드 코드 대신 깔끔한 목록으로 렌더링됩니다:

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

코드 예시

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

업데이트 받는 방법

NuGet

NuGet을 통해 최신 GroupDocs.Markdown 패키지로 업그레이드하십시오(예: Install-Package GroupDocs.Markdown).

리소스