우리는 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대체)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
ConvertResult의 새로운 속성
Warnings— 비치명적 변환 경고
ExportImagesToFileSystemStrategy 및 CustomImagesStrategy의 새로운 속성
ImagesRelativePath— Markdown 이미지 참조에 기록되는 경로를 제어
CustomImageSavingArgs의 새로운 메서드
SetReplacementImage(Stream imageStream)— 이미지 콘텐츠 교체
제거된 타입
IExportStrategy—IImageExportStrategy및IUriExportStrategy로 대체DocumentConverterOptions—ConvertOptions로 이름 변경DocumentConverterResult—ConvertResult로 이름 변경
호환성 깨지는 변경 사항
이름이 변경된 타입
| 이전 | 이후 |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
FileFormat 열거형
패밀리 수준 값(FileFormat.WordProcessing, FileFormat.Spreadsheet)은 특정 포맷(FileFormat.Docx, FileFormat.Xlsx 등)으로 대체됩니다. 새로운 항목: FileFormat.Txt, FileFormat.Chm.
ConvertOptions와 LoadOptions 분리
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)가 인터페이스로 교체
CustomImagesStrategy와 CustomUriExportStrategy는 이제 대리자 콜백 대신 IImageSavingHandler와 IUriSavingHandler 인터페이스를 사용합니다.
LoadOptions.Extension 및 LoadOptions.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" // 
};
목차 렌더링
목차가 포함된 문서는 원시 필드 코드 대신 깔끔한 목록으로 렌더링됩니다:
- 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).