ادغام سند Aspose.Words برای .NET
Aspose.Words Document Merger برای .NET به شما اجازه می دهد تا به طور برنامه نویسی هر تعداد اسناد سازگار با Word را به یک خروجی اضافه کنید، در حالی که فرمت، سبک ها، طرح صفحه، عنوان ها/پایه ها و زمینه ها را حفظ می کنید.
ویندوز، لینوکس و macOS بدون نیاز به Microsoft Office کار می کند.
نصب و نصب
- نصب بسته NuGet
Aspose.Words
. - درخواست مجوز اندازه گیری شده در اپلیکیشن استارتاپ برای اجتناب از شاخص های ارزیابی. مشاهده Licensing .
- نیازهای چارچوب را در راهنمای نصب بررسی کنید/).
پرداخت های پشتیبانی شده (انتخاب شده): DOC، DOCX، DOTX/DOTM، RTF، ODT، HTML/MHTML، PDF، TXT، WordML.خروجی های پشتیبانی شده: DOCX، DOC، PDF، HTML (فکس / جریان)، MHTML، ODT، RTF، تصاویر، EPUB، XPS و بیشتر.
راه اندازی سریع: اضافه کردن اسناد چندگانه
using Aspose.Words;
// Destination (master) document
var master = new Document();
var builder = new DocumentBuilder(master);
// Start on a clean page
builder.InsertBreak(BreakType.SectionBreakNewPage);
// Append each source with chosen import mode
ImportFormatMode mode = ImportFormatMode.KeepSourceFormatting; // or UseDestinationStyles
foreach (string path in new [] { "intro.docx", "spec.docx", "annex.rtf" })
{
var src = new Document(path);
master.AppendDocument(src, mode);
// Optional: force each source to start on a new page
builder.MoveToDocumentEnd();
builder.InsertBreak(BreakType.SectionBreakNewPage);
}
// Refresh fields (page numbers, TOC, cross‑refs)
master.UpdateFields();
master.Save("MergedOutput.pdf");
فرمت واردات
- KeepSourceFormatting – سبک های هر منبع و فرمت مستقیم را حفظ می کند (به طور ایده آل برای ورودی های برند شده).
- UseDestinationStyles – نقشه ها نام های سبک مشابه با تعاریف مقصد برای یک ظاهر یکنواخت را نشان می دهند.
بخش کنترل شده و طرح صفحه
هر سند را با صفحه جدید ، ادامه ، یا اضافه / اضافه کردن صفحه شروع کنید:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage
منحصر به فرد / اندازه صفحه با کپی کردن PageSetup
از یک بخش قالب:
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;
}
سرها، پاها و نشانه های آب
کلیدهای منبع را نگه دارید یا آنها را با یک مجموعه اصلی پس از ادغام جایگزین کنید:
// 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);
}
میدان ها، مرجع های متقابل و TOC
پس از ادغام، به روز رسانی میدان ها به طوری که تعداد صفحات، مرجع، و ** جدول محتوا** مطابقت با طرح جدید:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table pagination
اگر یک TOC استاد واحد را حفظ می کنید، آن را یک بار وارد کنید و اجازه دهید خودکار بازگردد:
var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u"); // classic TOC switch set
master.UpdateFields();
رمز عبور محافظت شده ورودی و خروجی امن
using Aspose.Words.Loading;
var load = new LoadOptions { Password = "secret" };
var protectedDoc = new Document("protected.docx", load);
master.AppendDocument(protectedDoc, ImportFormatMode.KeepSourceFormatting);
// Save encrypted PDF
using Aspose.Words.Saving;
var pdf = new PdfSaveOptions
{
EncryptionDetails = new PdfEncryptionDetails("openPwd", "ownerPwd",
PdfEncryptionAlgorithm.RC4_128)
{ Permissions = PdfPermissions.DisallowAll }
};
master.Save("MergedEncrypted.pdf", pdf);
جریان اول / جریان حجم بالا
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.Pdf);
output.Position = 0;
// return/output stream
}
تصمیمات عملکردی
- Batch Appends در حافظه؛ تماس
UpdateFields()
یک بار در پایان. - ترجیح UseDestinationStyles هنگامی که شما می خواهید سبک سازگار در سراسر ده ها ورودی.
- Dispose
Document
مثال های زود در لوله های طولانی برای کاهش حافظه قله.
مدیریت فرمت های مخلوط (HTML، PDF، TXT)
- HTML/MHTML : واردات با سبک ها و تصاویر (رابطه یا ادغام شده).
- PDF : صفحات در صورت امکان به عنوان محتوای مجدد وارد می شوند؛ طرح های پیچیده در هنگام خروجی به فرمت های ثابت (به عنوان مثال، PDF) حفظ می شود).
- TXT : به عنوان پاراگراف های صاف اضافه شده است؛ یک سبک پایه پس از واردات برای سازگاری اعمال می شود.
بهترین شیوهها
- پیش اعتبار برای فساد / رمز عبور برای جلوگیری از ادغام جزئی.
- KeepSourceFormatting را انتخاب کنید؛ هنگامی که وفاداری برند مهم است،UseDestinationStyles را برای ظاهر یکنواخت انتخاب می کنید.
- قبل از هر پیوست، یک پاراگراف را وارد کنید تا تنظیمات صفحه را محافظت کنید.
- نمونه ها / پاها را پس از روشن کردن ترکیب کنید اگر می خواهید یک قالب شرکت واحد داشته باشید.
- به روز رسانی میدان ها و TOC به عنوان مرحله نهایی.
- برای باند های بسیار بزرگ، به گروه ها تقسیم کنید و آنها را با هم ترکیب کنید تا حافظه را پایدار نگه دارید.
FAQ
**آیا می توانم هر منبع را مجبور به شروع در یک صفحه جدید کنم?**بله، یک بخش یا صفحه را قبل از هر یک از آن ها وارد کنید AppendDocument
تماس یا تنظیم SectionStart
برای NewPage
.
**چگونه در هنگام واردات، سبک های مقصد را حفظ کنم?**استفاده ImportFormatMode.UseDestinationStyles
در AppendDocument
.
**آیا می خواهید شماره صفحه و TOC به طور خودکار به روز شود?**تماس UpdateFields()
(و UpdatePageLayout()
برای صفحات دقیق) پس از همه پیوندها.
**آیا می توانم ورودی های رمزگذاری شده را با هم ترکیب کنم و خروجی رمزگیر شده تولید کنم?**بله، ارائه دهید LoadOptions.Password
برای واردات و استفاده PdfSaveOptions.EncryptionDetails
(یا OoxmlSaveOptions.Password
) برای تولید.
**آیا دفتر مورد نیاز است?**No. Aspose.Words یک کتابخانه مستقل است.