ادغامکننده سند
این Aspose.Words Document Merger for .NET به شما امکان میدهد بهصورت برنامهنویسی هر تعداد سند سازگار با Word را به هم بپیوندید به یک خروجی واحد تبدیل کنید در حالی که قالببندی، سبکها، چیدمان صفحه، سرصفحه/پاصفحه و فیلدها حفظ میشوند. استفادههای معمول شامل ترکیب گزارشها، بستهبندی پیوستهای قرارداد، یا تجمیع محتوای تولید شده برای بایگانی است.
بدون نیاز به رابط گرافیکی بر روی Windows، Linux و macOS کار میکند. نیازی به Microsoft Office نیست.
نصب و راهاندازی
- پکیج NuGet را نصب کنید
Aspose.Words. - در زمان راهاندازی برنامه، مجوز متری را اعمال کنید تا از نمایش علامتهای ارزیابی جلوگیری شود. ببینید مجوز متری .
- نیازمندیهای چارچوب را در راهنمای نصب .
IDEها: Visual Studio 2017–2026، JetBrains Rider، MonoDevelop.
ورودیها / خروجیهای پشتیبانیشده: DOC، DOCX، RTF، DOT، DOTX، DOTM، DOCM، Word 2003 XML و Word 2007 XML.
شروع سریع: ضمیمه کردن چندین سند
using Aspose.Words;
var master = new Document();
var builder = new DocumentBuilder(master);
builder.InsertBreak(BreakType.SectionBreakNewPage);
ImportFormatMode mode = ImportFormatMode.KeepSourceFormatting;
foreach (string path in new[] { "Blank.docx", "Background images.docx", "annex.rtf" })
{
var src = new Document(path);
master.AppendDocument(src, mode);
builder.MoveToDocumentEnd();
builder.InsertBreak(BreakType.SectionBreakNewPage);
}
master.UpdateFields();
master.Save("MergedOutput.docx");حالتهای فرمت واردات:
- KeepSourceFormatting — استایلها و قالببندی مستقیم هر منبع را حفظ میکند (ایدهآل برای درجهای برنددار).
- UseDestinationStyles — نامهای استایل یکسان را به تعاریف مقصد نگاشت میکند تا ظاهر یکنواختی داشته باشد.
Controlled Section & Page Layout — بخش & چیدمان صفحه کنترلشده
شروع هر سند در صفحه جدید, پیوسته,، یا صفحه زوج/فرد:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPageیکسانسازی حاشیهها/اندازه صفحه با کپی کردن PageSetup از یک بخش قالب:
using Aspose.Words;
var master = new Document();
var template = new Document("template.docx");
var pageSetup = template.FirstSection.PageSetup;
foreach (Section s in master.Sections)
{
s.PageSetup.Orientation = pageSetup.Orientation;
s.PageSetup.PageWidth = pageSetup.PageWidth;
s.PageSetup.PageHeight = pageSetup.PageHeight;
s.PageSetup.TopMargin = pageSetup.TopMargin;
s.PageSetup.BottomMargin = pageSetup.BottomMargin;
s.PageSetup.LeftMargin = pageSetup.LeftMargin;
s.PageSetup.RightMargin = pageSetup.RightMargin;
}Headers, Footers, and Watermarks — سرصفحهها، پاورقها و واترمارکها
Keep source headers/footers, or replace them with a master set after the merge: — سرصفحهها/پاورقهای منبع را نگه دارید، یا پس از ادغام آنها را با یک مجموعه اصلی جایگزین کنید:
// Copy headers/footers from a master template into every section
var hft = new Document("header-footer-template.docx");
foreach (Section s in master.Sections)
{
s.HeadersFooters.Clear();
s.HeadersFooters.AddClone(hft.FirstSection.HeadersFooters[HeaderFooterType.HeaderPrimary]);
s.HeadersFooters.AddClone(hft.FirstSection.HeadersFooters[HeaderFooterType.FooterPrimary]);
}
// Add a simple text watermark
foreach (Section s in master.Sections)
{
var header = s.HeadersFooters[HeaderFooterType.HeaderPrimary] ?? new HeaderFooter(master, HeaderFooterType.HeaderPrimary);
if (header.ParentNode == null) s.HeadersFooters.Add(header);
var shape = new Shape(master, ShapeType.TextPlainText)
{
RelativeHorizontalPosition = RelativeHorizontalPosition.Page,
RelativeVerticalPosition = RelativeVerticalPosition.Page,
WrapType = WrapType.None,
Rotation = -40,
Width = 400, Height = 100, Left = 100, Top = 200,
BehindText = true
};
shape.TextPath.Text = "CONFIDENTIAL";
header.AppendChild(shape);
}Fields, Cross‑References, and TOC — فیلدها، ارجاعات متقابل، و فهرست مطالب
پس از ادغام، فیلدها را بهروزرسانی کنید تا شمارههای صفحه، مراجع، و فهرست مطالب با طرح جدید مطابقت داشته باشند:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table paginationاگر یک TOC اصلی واحد را نگهداری میکنید، یکبار آن را وارد کنید و بگذارید بهصورت خودکار بازسازی شود:
using Aspose.Words;
var master = new Document();
var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \\$1 \\$1 \\$1 \\$1"); // classic TOC switch set
master.UpdateFields();Stream‑First / High‑Volume ادغامها
using System.IO;
using System.Collections.Generic;
using Aspose.Words;
using Aspose.Words.Lists;
IEnumerable<Stream> sourceStreams = new List<Stream>();
using (var output = new MemoryStream())
{
var dst = new Document();
foreach (Stream srcStream in sourceStreams)
{
using var s = srcStream; // e.g., S3/Blob stream
var src = new Document(s); // auto‑detects format
dst.AppendDocument(src, ImportFormatMode.UseDestinationStyles);
}
dst.UpdateFields();
dst.Save(output, SaveFormat.docx);
output.Position = 0;
// return/output stream
}نکات عملکرد:
- افزودنهای دستهای در حافظه؛ فراخوانی
UpdateFields()یکبار در انتها. - ترجیح دهید UseDestinationStyles وقتی میخواهید استایلگذاری یکسانی در دهها ورودی داشته باشید.
- حذف
Documentنمونهها را زودتر در خطوط لوله طولانی برای کاهش حداکثر حافظه.
بهترین شیوهها
- پیشاعتبارسنجی برای فساد/رمزهای عبور تا از ادغامهای جزئی جلوگیری شود.
- انتخاب کنید KeepSourceFormatting وقتی وفاداری به برند مهم است؛ انتخاب کنید UseDestinationStyles برای ظاهر یکنواخت.
- یک مورد وارد کنید شکست بخش قبل از هر افزودن برای محافظت از تنظیمات صفحه.
- یکپارچهسازی سرصفحهها/پاورقیها پس از افزودن اگر میخواهید یک قالب شرکتی واحد داشته باشید.
- بهروزرسانی فیلدها و فهرست مطالب به عنوان گام نهایی.
- برای دستههای بسیار بزرگ، به گروهها تقسیم کنید و گروهها را ادغام کنید تا حافظه ثابت بماند.
FAQ
- آیا میتوانم هر منبع را مجبور کنم که در صفحه جدیدی شروع شود؟? بله. قبل از هر یک یک بخش یا شکست صفحه درج کنید
AppendDocumentفراخوانی یا تنظیمSectionStartبهNewPage. - چگونه در هنگام وارد کردن، سبکهای مقصد را حفظ کنم؟? استفاده
ImportFormatMode.UseDestinationStylesدرAppendDocument. - آیا شماره صفحات و فهرست مطالب بهصورت خودکار بهروزرسانی میشوند؟? فراخوانی
UpdateFields()(وUpdatePageLayout()برای صفحهبندی دقیق) پس از تمام الحاقات. - آیا Office لازم است؟? خیر. Aspose.Words یک کتابخانه مستقل است.