ما خوشحالیم که انتشار GroupDocs.Merger برای .NET نسخه 26.9 را اعلام میکنیم که از سپتامبر 2026 در دسترس است. این نسخه امکان ترکیب ردیفی صفحاتگسترده را معرفی میکند، انتخاب صفحه در فایلهای TIFF را از طریق PageBuilder بهبود میبخشد، مدیریت ابعاد پیشنمایش را دقیقتر میکند، مشکلات همزمانی در خروجی Visio و DOC را برطرف میسازد و چندین حالت شکست ساکت را با استثناهای واضح جایگزین میکند—بهطوری که API پایدارتر و پیشبینیپذیرتر باشد.
چه چیزهای جدیدی در این انتشار وجود دارد
- [Feature] ترکیب ردیفهای Excel از چندین فایل در یک شیت واحد (MERGERNET-2198)
- [Feature] اعمال انتخاب صفحه
PageBuilderبه اولین سند TIFF (MERGERNET-1372) - [Improvement] پرتاب استثنا زمانی که SetLicense نتواند فایل لایسنس را پیدا کند (MERGERNET-2183)
- [Improvement] رد کردن جریان لایسنس خالی در SetLicense (MERGERNET-2184)
- [Improvement] پرتاب استثنای واضح زمانی که یک تصویر یا فایل صوتی را به فرمت پشتیبانینشدهای میپیوندید (MERGERNET-2190)
- [Improvement] حذف System.Drawing.Common از بستههای چندپلتفرمی و گزارش واضح وابستگیهای گمشده (MERGERNET-2202)
- [Bug] بستن فایل منبع پس از باز یا پیوستن یک سند توسط مسیر (MERGERNET-2187)
- [Bug] فراخوانی کارخانه جریان (stream factory) تنها یک بار هنگام ساخت Merger (MERGERNET-2189)
- [Bug] رفع خروجی خراب DOC هنگام پیوستن اسناد PDF یا XPS به DOC از چندین رشته (MERGERNET-2192)
- [Bug] اعمال تغییر جهت صفحه به هر صفحه وقتی شماره صفحهای مشخص نشده باشد (MERGERNET-2194)
- [Bug] رعایت عرض و ارتفاع پیشنمایش درخواستشده در هر خانواده فرمت سند (MERGERNET-2196)
- [Bug] رد کردن ExtractPages و RemovePages که بدون شماره صفحه فراخوانی میشوند بهجای تولید ساکت یک سند خالی یا بدون تغییر (MERGERNET-2197)
- [Bug] رفع خطای Intermittent ArgumentNullException trueTypeFont در اسناد Visio هنگام پردازش همزمان (MERGERNET-2199)
- [Bug] رفع خطای NullReferenceException در PDF Portfolioها وقتی فایلی که جاسازی شده تاریخ اصلاحی نداشته باشد (MERGERNET-2200)
تغییرات API عمومی
1. ترکیب صفحاتگسترده — حالت ردیفی (API جدید)
انواع عمومی جدید در فضای نام GroupDocs.Merger.Domain.Options:
| نوع | توضیح |
|---|---|
| SpreadsheetJoinOptions | گزینههای ترکیب برای صفحاتگسترده که از PageJoinOptions ارث میبرند. ویژگیها: Mode، SkipRows، SheetMatching. |
| SpreadsheetJoinMode | حالت Worksheets (پیشفرض) شیتهای فایل ترکیبشده را بهعنوان شیتهای جداگانه اضافه میکند، همانطور که قبلاً بود. حالت Rows ردیفهای هر فایل ترکیبشده را زیر آخرین ردیف حاوی داده شیت متناظر در نتیجه اضافه میکند. |
| SpreadsheetSheetMatching | ByIndex (پیشفرض) شیت ۲ را به شیت ۲، شیت ۳ را به شیت ۳ و غیره اضافه میکند؛ FirstSheetOnly فقط اولین شیت هر فایل ترکیبشده را اضافه میکند. |
SkipRowsاولین N ردیف هر فایل ترکیبشده را نادیده میگیرد، برای مثال ردیف سرعنوان. سند اول همیشه بهصورت کامل گرفته میشود.SkipRowsوSheetMatchingدر حالتWorksheetsتأثیری ندارند.- فرمتهای پشتیبانیشده: XLSX، XLS، XLSM، XLSB، XLTX، XLTM، XLT، XLAM و ODS.
- مواردی که منتقل میشوند: مقادیر سلول، فرمولها (ارجاعات نسبی تنظیم میشوند)، سبکها، سلولهای ترکیبی و ارتفاع ردیفها. مواردی که منتقل نمیشوند: نمودارها، تصاویر، جدولهای محوری، جداول، قالببندی شرطی و اعتبارسنجی داده.
- مقدار منفی
SkipRowsباعث پرتابGroupDocsMergerExceptionمیشود («تعداد ردیفهای قابل نادیدهگیری نمیتواند منفی باشد.»). - عبور از محدودیتهای ردیف (65 536 برای XLS/XLT، 1 048 576 برای سایر فرمتها) باعث پرتاب
GroupDocsMergerExceptionمیشود. ApplyPageBuilderدر حالی که یک صفحاتگسترده در حالتRowsترکیب شده در انتظار است،GroupDocsMergerExceptionپرتاب میکند.
2. TIFF — PageBuilder انتخاب صفحه اولین سند را اعمال میکند
بدون تغییر در API. CreatePageBuilder و ApplyPageBuilder اکنون صفحات انتخابشده از اولین سند TIFF را اعمال میکنند؛ پیشتر همیشه تمام صفحات اولین سند گنجانده میشد. ترکیبهایی که از PageBuilder استفاده نمیکنند همان نتیجه قبلی را تولید میکنند.
پس از ترکیب با ImageJoinOptions، CreatePageBuilder و ApplyPageBuilder اکنون GroupDocsMergerException پرتاب میکنند، زیرا تصاویر ترکیبشده بهصورت یک طرح واحد ساخته میشوند نه بهصورت توالی صفحات.
3. لایسنسدهی — SetLicense دیگر بهصورت ساکت شکست نمیخورد
License.SetLicense(string licensePath)هنگام عدم یافتن فایل لایسنسInvalidOperationExceptionپرتاب میکند («License not found: …»).License.SetLicense(Stream licenseStream)برای جریان خالیArgumentNullExceptionپرتاب میکند.
4. عملیات صفحه با لیست صفحه خالی
ExtractPagesوRemovePagesکه بدون شماره صفحه فراخوانی میشوند، اکنونGroupDocsMergerExceptionپرتاب میکنند («There are no page numbers to extract.» / «There are no page numbers to remove.»).ChangeOrientationکه بدون شماره صفحه فراخوانی میشود، جهت تمام صفحات را برای اسناد PDF، XPS، پردازشگر متن، صفحاتگسترده و Visio تغییر میدهد.
5. اندازه پیشنمایش
GeneratePreview اکنون هر تصویر صفحه را به Width و Height درخواستشده تغییر اندازه میدهد — بهصورت کشیده شده دقیقاً به آن اندازه وقتی هر دو مقدار داده شوند. مقدار منفی Width یا Height اکنون GroupDocsMergerException پرتاب میکند.
6. System.Drawing.Common و وابستگیهای گمشده
- بستههای چندپلتفرمی (
GroupDocs.Merger.Net60،GroupDocs.Merger.Net80،GroupDocs.Merger.Net100) دیگر بهSystem.Drawing.Commonوابسته نیستند. - وابستگیهای زمان اجرا که گمشدهاند، اکنون
MissingDependencyExceptionپرتاب میکنند و نام مؤلفه گمشده و دستورالعمل نصب را اعلام مینمایند.
7. ترکیب تصاویر و صدا در فرمتهای پشتیبانینشده
ترکیب یک تصویر یا فایل صوتی در فرمت سندی که پشتیبانی نمیشود، اکنون FileTypeNotSupportedException پرتاب میکند («Joining ‘…’ into ‘…’ is not supported»).
ویژگیهای جدید
- ترکیب ردیفی صفحاتگسترده: ردیفهای چندین صفحاتگسترده اکنون میتوانند به یک شیت واحد اضافه شوند بهجای اینکه بهعنوان شیتهای جداگانه افزوده شوند، با گزینههایی برای نادیدهگیری ردیفهای سرعنوان و تطبیق شیتها بر اساس موقعیت.
- PageBuilder برای اسناد TIFF: انتخاب صفحهای که با
PageBuilderانجام میشود، اکنون به اولین سند TIFF نیز اعمال میشود — پیشتر همیشه تمام صفحات آن گنجانده میشد. - ابعاد پیشنمایش دقیق:
GeneratePreviewاکنون تصاویر را با عرض و ارتفاع درخواستشده برای هر خانواده فرمت سند برمیگرداند. - رفع مشکلات همزمانی: خروجی Visio و DOC دیگر بهصورت متناوب هنگام پردازش از چندین رشته شکست نمیخورند.
- مدیریت منابع: اسنادی که با مسیر فایل باز یا ترکیب میشوند، دیگر فایل منبع را باز نگه نمیدارند؛ کارخانههای جریان دقیقاً یک بار فراخوانی میشوند.
- خطاهای واضحتر: چندین عملیات که پیشتر بهصورت ساکت شکست میخوردند، اکنون استثناهای توصیفی پرتاب میکنند.
مثال کد
using GroupDocs.Merger;
using GroupDocs.Merger.Domain.Options;
using (var merger = new Merger("january.xlsx"))
{
var options = new SpreadsheetJoinOptions
{
Mode = SpreadsheetJoinMode.Rows, // append rows into the existing sheets
SkipRows = 1 // skip the header row of each joined file
};
merger.Join("february.xlsx", options);
merger.Join("march.xlsx", options);
merger.Save("q1.xlsx");
}
نحوه دریافت بهروزرسانی
NuGet
- بسته: GroupDocs.Merger 26.9.0
- دستور نصب:
dotnet add package GroupDocs.Merger --version 26.9.0