ما خوشحالیم که انتشار GroupDocs.Markdown for .NET 26.3 را اعلام میکنیم که از مارس 2026 در دسترس است. این بهروزرسانی بزرگ شامل یک API عمومی بازطراحیشده، یک رندرکننده سفارشی Markdown مبتنی بر DOM، کنترل کامل طعم Markdown، پشتیبانی از async و مجموعهای از رفع باگها میباشد. همچنین بستههای NuGet زمان اجرا بهصورت per‑TFM و پشتیبانی از .NET 8 و .NET 10 اضافه شدهاند.
موارد جدید در این انتشار
| کلید | دستهبندی | خلاصه |
|---|---|---|
| MARKDOWNNET-33 | قابلیت | تقسیم بسته NuGet به بستههای زمان اجرا per‑TFM |
| MARKDOWNNET-31 | قابلیت | افزودن پشتیبانی از .NET 8 و .NET 10 |
| MARKDOWNNET-30 | قابلیت | رندرکننده سفارشی Markdown مبتنی بر DOM |
| MARKDOWNNET-29 | قابلیت | هشدارهای تبدیل و مدل خطای یکپارچه |
| MARKDOWNNET-28 | قابلیت | مسیرهای نسبی تصویر و جایگزینی تصویر |
| MARKDOWNNET-27 | قابلیت | جابجایی سطح عنوان و تولید YAML front matter |
| MARKDOWNNET-26 | قابلیت | کنترل طعم Markdown و گزینههای رندر کردن صفحهگسترده |
| MARKDOWNNET-25 | قابلیت | بازرسی سند بدون تبدیل |
| MARKDOWNNET-24 | قابلیت | API ناهمزمان |
| MARKDOWNNET-23 | قابلیت | متدهای ایستاتیک راحتی و کشف فرمت |
| MARKDOWNNET-20 | بهبود | بازنگری و بازطراحی API |
| MARKDOWNNET-8 | قابلیت | پشتیبانی از جایگزینی تصاویر هنگام تبدیل به Markdown |
| MARKDOWNNET-35 | رفعباگ | مشکلات کیفیت و عملکرد |
تغییرات API عمومی
انواع عمومی جدید
DocumentInfo— متادیتای سند (فرمت، تعداد صفحات، عنوان، نویسنده، وضعیت رمزنگاری)MarkdownFlavor— enum برای گویش هدف Markdown (GitHub، CommonMark)IImageSavingHandler— اینترفیس برای فراخوانیهای سفارشی ذخیرهسازی تصویرIUriSavingHandler— اینترفیس برای فراخوانیهای سفارشی ذخیرهسازی URIGroupDocsMarkdownException— استثنای عمومی تبدیلInvalidFormatException— فرمت فایل خراب یا ناشناختهDocumentProtectedException— رمز عبور نادرست یا غیاب آن
متدهای ایستاتیک جدید در MarkdownConverter
ToMarkdown(string sourcePath)و overloadهای آن باLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)و overloadهای آنGetInfo(string sourcePath)و overloadهای آنGetSupportedFormats()- نسخههای ناهمزمان:
ToMarkdownAsync،ToFileAsync،GetInfoAsync
متدهای نمونه جدید در MarkdownConverter
GetDocumentInfo()ConvertAsync()و overloadهای آن
ویژگیهای جدید در ConvertOptions
ImageExportStrategy(جایگزینExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns،MaxRows،SheetSeparator،IncludeHiddenSheets
ویژگیهای جدید در ConvertResult
Warnings— هشدارهای تبدیل غیرکشنده
ویژگیهای جدید در ExportImagesToFileSystemStrategy و CustomImagesStrategy
ImagesRelativePath— مسیر نوشتهشده در ارجاعات تصویر Markdown را کنترل میکند
متدهای جدید در CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— جایگزینی محتوای تصویر
انواع حذفشده
IExportStrategy— جایگزین شده توسطIImageExportStrategyوIUriExportStrategyDocumentConverterOptions— نامگذاری شده بهConvertOptionsDocumentConverterResult— نامگذاری شده بهConvertResult
تغییرات ناسازگار
انواع تغییر نام یافته
| قبل | بعد |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
Enum FileFormat
مقادیر سطح خانواده (FileFormat.WordProcessing، FileFormat.Spreadsheet) با فرمتهای خاص (FileFormat.Docx، FileFormat.Xlsx و غیره) جایگزین شدهاند. ورودیهای جدید: FileFormat.Txt، FileFormat.Chm.
ConvertOptions and LoadOptions separated
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);
Image and URI strategies split
ویژگی تک ExportStrategy با دو ویژگی تایپشده جایگزین شد:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
Delegates replaced with interfaces
CustomImagesStrategy و CustomUriExportStrategy اکنون به جای فراخوانیهای delegate، اینترفیسهای IImageSavingHandler و IUriSavingHandler را میپذیرند.
LoadOptions.Extension and LoadOptions.MimeType are internal
بهجای تنظیم مستقیم Extension یا MimeType از new LoadOptions(FileFormat.Docx) استفاده کنید.
ویژگیهای جدید
رندرکننده سفارشی Markdown مبتنی بر DOM
کتابخانه دیگر تولید Markdown را به یک خروجی شخص ثالث واگذار نمیکند. یک رندرکننده سفارشی مدل شیء سند (DOM) را گره به گره پیمایش میکند و مستقیماً 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 Front Matter
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
به آخرین بسته GroupDocs.Markdown از طریق NuGet ارتقا دهید (مثلاً Install-Package GroupDocs.Markdown).