ما خوشحالیم که انتشار GroupDocs.Merger for .NET v26.10 را اعلام میکنیم، که از اکتبر 2026 در دسترس است. این نسخه بهبودهای عمدهای برای کنترل بارگذاری منابع خارجی معرفی میکند، مشکلات بحرانی همزمانی در پردازش EPUB و TeX را برطرف میسازد، صفحهبندی EPUB را بهبود میبخشد، فرمت PDF و عنوان را در خروجی خود‑برچسبگذاریشده حفظ میکند و چندین خطای مرتبط با .NET Framework را رفع میکند. در مجموع شامل ۱۰ ویژگی، بهبود و رفع باگ است.
چه چیزهای جدیدی در این نسخه وجود دارد
- [Feature] بهطور پیشفرض بارگذاری منابع خارجی را نادیده بگیرید، با لیست سفید مکانهای مورد اعتماد و یک هندلر برای هر منبع
- [Bug] رفع NullReferenceException برای اسناد EPUB که فایل فهرست مطالب آن پسوند .ncx ندارد
- [Bug] رفع مشکل بارگذاری System.ValueTuple در پروژههای packages.config تحت .NET Framework هنگام ترکیب تصاویر
- [Bug] رفع ترکیب اسناد SVG که در زمانهای اجرایی .NET Framework 4.6.2 تا 4.7.0 شکست میخورد
- [Bug] رندر صفحات EPUB با طرح ثابت بهجای تقسیم هر صفحه به دو صفحه، یک صفحه برای هر صفحه کتاب باشد
- [Bug] بهروزرسانی System.Security.Cryptography.Pkcs به نسخههای 8.0.2 و 9.0.21 (CVE-2026-84008, CVE-2026-70162)
- [Bug] حفظ فرمت PDF اصلی و عنوان هنگام ذخیره با فعالسازی auto‑tagging
- [Bug] رفع ArgumentException هنگام بارگذاری همزمان اسناد TeX
- [Bug] ذخیره خروجی LowCode که بهصورت نام فایل ساده ارائه شده است در پوشه جاری و رد اسناد ترکیبی با فرمت متفاوت
- [Bug] رفع خطاهای متناوب NullReferenceException یا IndexOutOfRangeException در اسناد EPUB هنگام پردازش همزمان
تغییرات API عمومی
1. منابع خارجی — بهصورت پیشفرض رد میشوند (API جدید، ناسازگار با نسخههای قبلی)
انواع عمومی جدید در فضای نام GroupDocs.Merger.Domain.Options:
| Type | Description |
|---|---|
| IResourceLoadingOptions | SkipExternalResources، WhitelistedResources و ExternalResourceHandler را تعریف میکند. LoadOptions اینترفیس را پیادهسازی میکند. |
| IExternalResourceHandler | متد OnLoading برای هر منبع خارجی قبل از بارگذاری فراخوانی میشود و میتواند اجازه دهد، رد کند یا جایگزین کند. |
| ExternalResourceLoadingArgs | منبعی که به OnLoading پاس داده میشود: Uri، Skipped (پیشتنظیم شده بر اساس تصمیم دو گزینه دیگر) و Data (محتوایی که بهجای بارگذاری منبع استفاده میشود). |
ویژگیهای جدید LoadOptions:
SkipExternalResources— بهصورت پیشفرض در هر سازندهtrueاست. وقتیtrueباشد، هیچ منبع خارجیای بارگذاری نمیشود مگر آنهایی که باWhitelistedResourcesمطابقت داشته باشند یا توسط هندلر اجازه داده شوند.WhitelistedResources— پیشوندهای URI مطلق منابعی که هنگامSkipExternalResourcesبرابرtrueبارگذاری میشوند، برای مثالhttps://cdn.example.com/assets/یاfile:///C:/assets/. بهصورت پیشفرض خالی است.ExternalResourceHandler— بهصورت پیشفرضnullاست.
تغییرات ناسازگار با نسخههای قبلی:
- منابع خارجی دیگر بهصورت پیشفرض بارگذاری نمیشوند. منابع ریموت (
http،https،ftpو سایر طرحها)، مسیرهای UNC، فایلهای محلی، از جمله فایلهای داخل پوشه سند، و ارجاعات نسبی که خارج از سند اشاره میکنند، نادیده گرفته میشوند و عملیات ادامه مییابد. نسخههای قبلی این منابع را بارگذاری میکردند. بنابراین ممکن است تصاویر و استایلشیتهای ریموت اسناد HTML، Word و ارائه در خروجی گم شوند و شمارش صفحات اسناد HTML و Word تغییر کند. محتویاتی که سند خود حمل میکند — URIهایdata:، ارجاعاتcid:، بخشهای MHTML و رسانههای بستهبندیشده — همچنان بارگذاری میشوند. برای بارگذاری منابع خارجی، مکانهایشان را در لیست سفید بگذارید یاSkipExternalResourcesرا برای اسنادی که به آنها اعتماد دارید بهfalseتنظیم کنید. LoadOptionsاکنونsealedاست. کلاسی که از آن ارثبری کند دیگر کامپایل نمیشود. مستقیم ازLoadOptionsاستفاده کنید یاILoadOptionsرا پیادهسازی کنید؛ یک پیادهسازی سفارشیILoadOptionsکه همچنینIResourceLoadingOptionsرا پیادهسازی نکند، سیاست پیشفرض را دریافت میکند.- ورودی
WhitelistedResourcesکهnull، خالی، غیرمطلق، شامل query یا fragment باشد یا%2F،%5Cیا%2Eداشته باشد، سازندهMergerخطایArgumentExceptionمیاندازد («منبع سفید شده ‘…’ باید یک URI مطلق بدون query، fragment یا کاراکترهای کدگذاریشده ‘/’, ‘\’ یا ‘.’ باشد.»). - اگر هندلر استثنا بیندازد، منبع نادیده گرفته میشود و عملیات خطای
GroupDocsMergerExceptionمیاندازد («هندلر منبع خارجی استثنا اینداخت؛ منبع نادیده گرفته شد. برای جزئیات به استثنای داخلی نگاه کنید.») که استثنای هندلر بهعنوانInnerExceptionقرار میگیرد. - اسناد EPUB و اسناد SVG و SVGZ در برخی عملیات، اکنون مارکاپ آنها برای ارجاعات خارجی بررسی میشود. سندی که مارکاپ آن XML صحیحی نباشد با
GroupDocsMergerExceptionشکست میخورد («مارکاپ سند قابل خواندن برای بررسی منابع خارجی نبود، بنابراین بارگذاری نشد. برای بارگذاری بدون بررسیSkipExternalResourcesرا بهfalseتنظیم کنید بدونExternalResourceHandler. »). - سازندههای
OleDiagramOptions،OleSpreadsheetOptionsوOleWordProcessingOptionsکه مسیر فایل و شماره صفحه را میپذیرند، تصویر شیء جاسازیشده را با رد منابع خارجی رندر میکنند، صرفنظر از اینکهLoadOptionsسند هدف چه اجازهای بدهد. برای نمایش آنها، داده تصویر خود را به سازندهای که آن را میپذیرد، پاس دهید. - محصولات بسته
GroupDocs.Merger.LowCodeهمیشه منابع خارجی را رد میکنند.
گزینهها هنگام ایجاد Merger خوانده میشوند و اسنادی که به آن اضافه میشوند از گزینههای آن پیروی میکنند.
2. اسناد PDF خود‑برچسبگذاریشده فرمت و عنوان منبع را حفظ میکنند
بدون تغییر API. یک سند PDF که با PdfSaveOptions.AccesibilitySettings.EnableAutoTagging برابر true ذخیره شود، فرمت PDF و عنوان منبع را حفظ میکند. پیشتر هر سند خود‑برچسبگذاریشده بهعنوان PDF/UA-1 علامتگذاری میشد و منبع بدون عنوان عنوان «Tagged PDF» میگرفت. خود‑برچسبگذاری فقط یک درخت ساختار منطقی اضافه میکند؛ باعث سازگاری PDF/UA نمیشود و منبعی که از پیش بهعنوان PDF/UA علامتگذاری شده باشد، علامت خود را حفظ میکند.
3. اسناد EPUB با طرح ثابت — یک صفحه برای هر صفحه کتاب
بدون تغییر API. یک سند EPUB با طرح ثابت اکنون یک صفحه برای هر صفحه کتاب دارد. پیشتر هر صفحه کتاب بهصورت دو صفحه رندر میشد، بهطوری که GetDocumentInfo تعداد صفحات را دو برابر گزارش میداد و صفحه N با صفحه کتاب N مطابقت نداشت. شمارههای صفحهای که به عملیاتهای صفحهای مانند ExtractPages، RemovePages یا Split پاس داده میشوند، اکنون به صفحات کتاب اشاره دارند.
4. GroupDocs.Merger.LowCode — مسیر خروجی و اسناد ترکیبی
JoinPdf،JoinDocx،JoinPptxوRemovePagesPdfمسیر خروجی نسبی را نسبت به پوشه کاری جاری حل میکنند. مسیر خروجی که بهصورت نام فایل ساده داده شود، اکنون در پوشه جاری ذخیره میشود؛ پیشتر در پوشه خروجی پیشفرض Merger ذخیره میشد. مسیر خروجیnullیا خالی خطایArgumentNullExceptionمیاندازد.JoinPdf،JoinDocxوJoinPptxهنگامیکه پسوند سند ترکیبی با فرمت محصول مطابقت نداشته باشد، قبل از نوشتن هر خروجی،FileTypeNotSupportedExceptionمیاندازند، برای مثال «فرمت ورودی با فرمت مورد انتظار ‘PDF’ مطابقت ندارد؛ فایل ترکیبی ‘a.docx’ ‘Microsoft Word Open XML Document (.docx)’ است.» پیشترJoinPdfوJoinDocxخروجی ترکیبی تولید میکردند وJoinPptxبعداً با پیام دیگری شکست میخورد. مسیر سند ترکیبیnullیا خالی خطایArgumentNullExceptionمیاندازد («سند در ایندکس 0 خالی یا null است.»).- تمام هفت محصول
FileTypeNotSupportedException(«فرمت ورودی با فرمت مورد انتظار ‘PDF’ مطابقت ندارد؛ فایل ارائهشده ‘Unknown’ است.») را برای مسیر منبع بدون پسوند انداختهاند، بهجایArgumentException.
5. وابستگیها
- بستههای زمان اجرا به System.Security.Cryptography.Pkcs نسخه 8.0.2 (
GroupDocs.Merger.Net60،GroupDocs.Merger.Net80و بستههای.Windowsآن) یا 9.0.21 (GroupDocs.Merger.Net100وGroupDocs.Merger.Net100.Windows) وابستهاند.GroupDocs.Merger.Net60،GroupDocs.Merger.Net60.WindowsوGroupDocs.Merger.LowCodeهمچنین به System.Formats.Asn1 نسخه 8.0.2 وابستهاند، وGroupDocs.Merger.LowCodeبه System.Security.Cryptography.Pkcs نسخه 8.0.2 وابسته است.GroupDocs.Merger.Net462بدون تغییر باقی مانده است. - در پروژههای .NET Framework، بسته
GroupDocs.Mergerدیگر ریدایرکت بایندینگ برای System.ValueTuple را بهapp.configیاweb.config(پروژههای packages.config) اضافه نمیکند و هدفهای ساخت .NET Framework آنDependsOnNETStandardرا بهtrueتنظیم میکنند مگر اینکه پروژه این مقدار را تنظیم کرده باشد.
ویژگیهای جدید
- کنترل منابع خارجی: تصاویر، استایلشیتها، تصاویر پیوندی و سایر فایلهایی که سند به آنها ارجاع میدهد، دیگر مگر آنکه اجازه داده شوند، بارگذاری نمیشوند.
LoadOptionsدارای ویژگیهای جدیدSkipExternalResources،WhitelistedResourcesوExternalResourceHandlerاست تا مکانهای مورد اعتماد را اجازه دهید، برای اسنادی که به آنها اعتماد دارید همه چیز را بگذارید، یا هر منبع را در کد خود تصمیمگیری، رد یا جایگزین کنید. - رفع مشکلات همزمانی: اسناد EPUB دیگر بهصورت متناوب با
NullReferenceExceptionیاIndexOutOfRangeExceptionشکست نمیخورند و اسناد TeX دیگر باArgumentExceptionهنگام پردازش از چندین رشته مواجه نمیشوند. - اسناد EPUB: اسناد EPUB با طرح ثابت اکنون یک صفحه برای هر صفحه کتاب دارند، بنابراین صفحه N صفحه کتاب N است. اسنادی که فایل فهرست مطالبشان پسوندی غیر از
.ncxدارد، دیگر باNullReferenceExceptionشکست نمیخورند. - خروجی PDF خود‑برچسبگذاریشده: سند PDF ذخیرهشده با فعالسازی خود‑برچسبگذاری، فرمت و عنوان منبع را حفظ میکند. دیگر بهصورت خودکار به PDF/UA-1 علامتگذاری نمیشود مگر اینکه منبع اصلی اینگونه باشد و منبع بدون عنوان دیگر عنوان «Tagged PDF» نمیگیرد.
- پروژههای .NET Framework: ترکیب تصاویر در پروژههای packages.config دیگر بهدلیل عدم بارگذاری System.ValueTuple شکست نمیخورد و ترکیب اسناد SVG دیگر بهدلیل بارگذاری netstandard در زمانهای اجرایی .NET Framework 4.6.2 تا 4.7.0 شکست نمیخورد.
- وابستگی اصلاحشده: بستهها به System.Security.Cryptography.Pkcs نسخه 8.0.2 (.NET 6.0 و .NET 8.0) یا 9.0.21 (.NET 10.0) وابستهاند، نسخههایی که CVE-2026-84008 و CVE-2026-70162 را رفع میکنند.
- محصولات LowCode: مسیر خروجی که بهصورت نام فایل ساده داده شود، در پوشه جاری ذخیره میشود و
JoinPdf،JoinDocxوJoinPptxقبل از نوشتن هر خروجی، سند ترکیبی با فرمت متفاوت را رد میکنند.
مثال کد
using System.Collections.Generic;
using GroupDocs.Merger;
using GroupDocs.Merger.Domain;
using GroupDocs.Merger.Domain.Options;
var loadOptions = new LoadOptions(FileType.HTML)
{
// Load resources from one trusted folder only; everything else stays denied
WhitelistedResources = new List<string> { "https://cdn.example.com/assets/" }
};
using (var merger = new Merger("page1.html", loadOptions))
{
merger.Join("page2.html");
merger.Save("merged.html");
}
using System;
using GroupDocs.Merger.Domain.Options;
public class TrustedPngHandler : IExternalResourceHandler
{
public void OnLoading(ExternalResourceLoadingArgs args)
{
Uri uri;
if (Uri.TryCreate(args.Uri, UriKind.Absolute, out uri)
&& uri.Scheme == Uri.UriSchemeHttps
&& uri.Host == "cdn.example.com"
&& uri.AbsolutePath.EndsWith(".png", StringComparison.OrdinalIgnoreCase))
{
args.Skipped = false; // allow; any other resource keeps the default decision
}
}
}
نحوه دریافت بهروزرسانی
NuGet
بهروزرسانی به آخرین بسته GroupDocs.Merger از طریق NuGet: GroupDocs.Merger 26.10.0
dotnet add package GroupDocs.Merger --version 26.10.0
دانلود مستقیم
دستگاههای اجرایی را از صفحه GroupDocs.Merger for .NET 26.10 دریافت کنید.