نحن سعداء بالإعلان عن إصدار 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/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 — تحذيرات تحويل غير قاتلة

الخصائص الجديدة في 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)
};

استبدال 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"  // ![](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

قم بالترقية إلى أحدث حزمة GroupDocs.Markdown عبر NuGet (مثال: Install-Package GroupDocs.Markdown).

الموارد