نحن سعداء بالإعلان عن إصدار GroupDocs.Signature for .NET v26.9، المتاح اعتبارًا من سبتمبر 2026. يأتي هذا الإصدار كتحديث يركز على الأمان ويضيف دعم .NET 10، ويوقف دعم .NET Standard 2.1، ويفرض إعدادات افتراضية أكثر صرامة لتحميل الموارد الخارجية، وخوارزميات التجزئة، والتحقق من الشهادات. كما يضيف دعم توقيع مستندات Word بشهادات ما بعد الكم (ML‑DSA) ويحل عدة أخطاء حرجة تتعلق بالتحقق، والتسجيل، والسلوك الخاص بالمنصات.

ما الجديد في هذا الإصدار

  • [Feature] دعم .NET 10 وإيقاف .NET Standard 2.1 (SIGNATURENET-5938)
  • [Enhancement] لا يتم تحميل الموارد الخارجية افتراضيًا (SIGNATURENET-5950)
  • [Enhancement] توقيعات PDF الرقمية تستخدم SHA‑256 افتراضيًا وتُحترم خاصية HashAlgorithm (SIGNATURENET-5976)
  • [Enhancement] لا يُظهر SignatureFont أنواع System.Drawing على .NET 6 وما بعده (SIGNATURENET-5943)
  • [Enhancement] يُرفض التوقيع بشهادة منتهية الصلاحية أو غير صالحة بعد افتراضيًا (SIGNATURENET-5995)
  • [Enhancement] توقيع مستندات Word بشهادات ما بعد الكم (ML‑DSA) (SIGNATURENET-5996)
  • [Bug] لم يتحقق Verify من توقيعات PDF الرقمية تشفيرياً (SIGNATURENET-5978)
  • [Bug] تم تجاهل SubjectName وIssuerName عند التحقق من مستندات PDF (SIGNATURENET-5997)
  • [Bug] تم إرسال بيانات اعتماد خادم الطوابع الزمنية فقط عندما يتم تعيين كل من اسم المستخدم وكلمة المرور (SIGNATURENET-5998)
  • [Bug] فشل حفظ العروض التقديمية ومستندات Word كصور على Linux وmacOS (SIGNATURENET-5999)
  • [Bug] تم تجاهل LoadExternalResources للمستندات داخل الأرشيفات (SIGNATURENET-6000)
  • [Bug] كانت الصور الخارجية وأوراق الأنماط لصور SVG تُحمَّل دائمًا (SIGNATURENET-6001)
  • [Bug] البحث والتحقق من جدول بيانات يحتوي على صورة مرتبطة أطلق استثناء ArgumentNullException (SIGNATURENET-6002)
  • [Bug] كان CertificateVerifyOptions.Expired غير صحيح بسبب إزاحة التوقيت المحلي UTC (SIGNATURENET-6003)
  • [Bug] لم يكن لـ SignatureSettings.LogLevel أي تأثير (SIGNATURENET-6004)
  • [Bug] خيارات VerifyOptions المعاد استخدامها أبلغت عن توقيعات مستندات تم التحقق منها مسبقًا (SIGNATURENET-6005)
  • [Bug] خيارات DigitalSignOptions المعاد استخدامها وقّعت عروضًا تقديمية لاحقة بشهادتها الأولى وتعليقها (SIGNATURENET-6006)
  • [Enhancement] تحسينات داخلية (SIGNATURENET-5979)

تغييرات API العامة

العضو التغيير
LoadOptions.SkipExternalResources جديد. bool، القيمة الافتراضية true. عندما تكون true، لا يتم تحميل الموارد الخارجية، باستثناء تلك التي تتطابق مع WhitelistedResources.
LoadOptions.WhitelistedResources جديد. List<string>، القيمة الافتراضية فارغة. أجزاء من العناوين التي قد تُحمَّل بينما SkipExternalResources تساوي true. يتم تحميل العنوان عندما يحتوي على أحد هذه الأجزاء، مع تجاهل حالة الأحرف. تعيين null يمسح القائمة.
LoadOptions.LoadExternalResources مهمل. لا يزال يعمل، بمعنى عكسي لـ SkipExternalResources. تغير الافتراضي من true إلى false. استخدامه ينتج تحذير تجميع CS0618.
SignatureFont تحويل ضمني من System.Drawing.Font تم إزالته من إصدارات .NET 6 و.NET 8 و.NET 10. مهمل في بناء .NET Framework. عيّن خصائص SignatureFont بدلاً من ذلك.
SignOptions.HashAlgorithm لا تغيير في التوقيع. الآن يُطبق على توقيعات PDF الرقمية؛ قبل ذلك كان يُتجاهل.
DigitalVerifyOptions.SubjectName، DigitalVerifyOptions.IssuerName لا تغيير في التوقيع. الآن يُطبق على مستندات PDF؛ قبل ذلك كان يُتجاهل.
SignatureSettings.LogLevel لا تغيير في التوقيع. الآن يُطبق: فقط الرسائل من المستويات الموجودة تصل إلى المسجل، وLogLevel.None لا يسجل شيئًا. قبل ذلك كان كل رسالة تُسجل بغض النظر عن القيمة. تم تصحيح أوصاف قيم LogLevel.
VerificationResult.Succeeded، VerificationResult.TotalSignatures لا تغيير في التوقيع. عندما يُستخدم كائن VerifyOptions لعدة استدعاءات Verify، الآن تُظهر فقط توقيعات المستند الذي تم التحقق منه حديثًا.
DigitalSignOptions.AllowExpired جديد. bool، القيمة الافتراضية false. عندما تكون false، يُرمى استثناء GroupDocsSignatureException عند التوقيع بشهادة انتهت صلاحيتها. عندما تكون true، يُوقّع المستند وتُسجل تحذير.
DigitalSignOptions.AllowNotYetValid جديد. bool، القيمة الافتراضية false. نفس السلوك، لكن بالنسبة لشهادة لم يبدأ صلاحيتها بعد.

ميزات جديدة

لا توجد ميزات جديدة بخلاف ما تم ذكره في ما الجديد في هذا الإصدار وتغييرات API العامة.

مثال على الشيفرة

السماح فقط بالموارد الخارجية الموثوقة:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // Only images from https://cdn.example.com/images/ are loaded.
}

التوقيع باستخدام SHA‑384 واستخدام شهادة منتهية (مع تحذير):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // honoured from this release; the default is SHA-256
    };
    signature.Sign("signed.pdf", options);
}

التوقيع بشهادة منتهية مسموح بها صراحةً:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger());
using (Signature signature = new Signature("sample.pdf", settings))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        AllowExpired = true
    };
    signature.Sign("signed.pdf", options);
    // If certificate.pfx has expired, the document is signed and the console shows a warning such as:
    // The signing certificate expired on 2019-05-01 12:00 UTC (subject "CN=...", thumbprint ...).
}

التوقيع على مستند Word بشهادة ما بعد الكم ML‑DSA:

using (Signature signature = new Signature("sample.docx"))
{
    DigitalSignOptions options = new DigitalSignOptions("ml-dsa-65.pfx")
    {
        Password = "1234567890"
    };
    signature.Sign("signed.docx", options);
}

تهيئة التسجيل لعرض الأخطاء والتحذيرات فقط:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
    // Errors and warnings, without the step-by-step traces.
    LogLevel = LogLevel.Error | LogLevel.Warning
};

كيفية الحصول على التحديث

NuGet

قم بالترقية إلى أحدث حزمة GroupDocs.Signature عبر NuGet: GroupDocs.Signature 26.9.0

أمر التثبيت:

dotnet add package GroupDocs.Signature --version 26.9.0

التحميل المباشر

حمّل التجميعات من صفحة GroupDocs.Signature for .NET 26.9

موارد