نحن سعداء بالإعلان عن إصدار GroupDocs.Markdown for .NET 26.3، المتاح اعتبارًا من مارس 2026. يأتي هذا التحديث الرئيسي مع واجهة برمجة تطبيقات عامة مُعاد تصميمها، مُعالج Markdown مخصص يعتمد على DOM، تحكم كامل في نكهة Markdown، دعم غير متزامن، ومجموعة من إصلاحات الأخطاء. كما يضيف حزم NuGet وقت التشغيل لكل TFM ودعمًا لـ .NET 8 و .NET 10.
ما الجديد في هذا الإصدار
| المفتاح | الفئة | الملخص |
|---|---|---|
| MARKDOWNNET-33 | Feature | تقسيم حزمة NuGet إلى حزم وقت تشغيل لكل TFM |
| MARKDOWNNET-31 | Feature | إضافة دعم .NET 8 و .NET 10 |
| MARKDOWNNET-30 | Feature | مُعالج Markdown مخصص يعتمد على DOM |
| MARKDOWNNET-29 | Feature | تحذيرات التحويل ونموذج الأخطاء الموحد |
| MARKDOWNNET-28 | Feature | مسارات الصور النسبية واستبدال الصور |
| MARKDOWNNET-27 | Feature | إزاحة مستوى العنوان وتوليد بيانات YAML المقدمة |
| MARKDOWNNET-26 | Feature | تحكم في نكهة Markdown وخيارات عرض الجداول |
| MARKDOWNNET-25 | Feature | فحص المستند دون تحويل |
| MARKDOWNNET-24 | Feature | واجهة برمجة تطبيقات غير متزامنة |
| MARKDOWNNET-23 | Feature | طرق ثابتة مريحة واكتشاف الصيغ |
| MARKDOWNNET-20 | Enhancement | مراجعة وإعادة تصميم الواجهة البرمجية |
| MARKDOWNNET-8 | Feature | دعم استبدال الصور أثناء التحويل إلى Markdown |
| MARKDOWNNET-35 | Bug Fix | قضايا جودة ووظائف |
تغييرات الواجهة العامة (Public API)
الأنواع العامة الجديدة
DocumentInfo— بيانات تعريف المستند (الصيغة، عدد الصفحات، العنوان، المؤلف، حالة التشفير)MarkdownFlavor— تعداد لللهجة المستهدفة من Markdown (GitHub, CommonMark)IImageSavingHandler— واجهة لاستدعاءات حفظ الصور المخصصةIUriSavingHandler— واجهة لاستدعاءات حفظ URI المخصصةGroupDocsMarkdownException— استثناء عام للتحويلInvalidFormatException— صيغة ملف تالفة أو غير معروفةDocumentProtectedException— كلمة مرور خاطئة أو مفقودة
الطرق الساكنة الجديدة في MarkdownConverter
ToMarkdown(string sourcePath)ومُحمّلاتها معLoadOptions/ConvertOptionsToFile(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وIUriExportStrategyDocumentConverterOptions— أُعيد تسميتها إلىConvertOptionsDocumentConverterResult— أُعيد تسميتها إلى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)
};
استبدال Delegates بالواجهات
الآن CustomImagesStrategy و CustomUriExportStrategy تقبلان واجهتي IImageSavingHandler و IUriSavingHandler بدلاً من استدعاءات delegate.
LoadOptions.Extension و LoadOptions.MimeType داخليتان
استخدم new LoadOptions(FileFormat.Docx) بدلاً من تعيين Extension أو MimeType مباشرة.
الميزات الجديدة
مُعالج Markdown مخصص يعتمد على DOM
لم تعد المكتبة تُفوض توليد Markdown إلى مصدر خارجي. يُمشي مُعالج مخصص عبر نموذج كائن المستند (DOM) عقدةً بعقدة ويُنتج Markdown مباشرةً، مما يمنح تحكمًا كاملاً في كل جانب من مخرجات المستند.
مستندات Word/PDF/Ebook/Text/CHM تُعرض مع دعم الفقرات، العناوين (H1‑H6)، الغامق، المائل، الشطب، الشيفرة المضمنة، القوائم المرتبة وغير المرتبة مع التداخل، الجداول (صيغة أنابيب GFM أو fallback إلى كتلة شيفرة CommonMark)، الروابط، والصور.
الجداول الإلكترونية تُعرض عبر تجوال خلية‑بخلية للشبكة، تنسيق القيم بحسب النوع، أقسام أوراق العمل، تقليم الأعمدة/الصفوف مع مؤشرات الحذف، تصفية الأوراق المخفية، وفواصل أوراق مخصصة.
طرق ثابتة مريحة
طرق تحويل من سطر واحد تدير الموارد تلقائيًا:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
واجهة برمجة تطبيقات غير متزامنة
نظائر غير متزامنة لجميع الطرق الساكنة والمثبتة مع دعم 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 }; // جداول أنابيب، شطب
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // جداول ككتل شيفرة
خيارات عرض الجداول الإلكترونية
تحكم كامل في طريقة تحويل الجداول الإلكترونية إلى 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 // إضافة بيانات YAML في البداية
};
تحذيرات التحويل ونموذج الأخطاء الموحد
جميع طرق Convert() الآن تُطلق استثناءً عند الفشل. يحمل ConvertResult تحذيرات غير قاتلة:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // مثال: "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).