Aspose.Words Document Merger لـ .NET
Aspose.Words Document Merger for .NET يسمح لك ببرمجة إضافة أي عدد من المستندات متوافقة مع Word إلى إصدار واحد مع الحفاظ على التنسيق، والأساليب، وتخطيط الصفحة، والقبعات/الخطوط، والمناطق.
يعمل بسهولة على ويندوز، لينكس، و macOS. لا يتطلب Microsoft Office.
تثبيت وإعداد
- قم بتثبيت حزمة NuGet
Aspose.Words
. - تطبيق الترخيص المقياس في تطبيقات بدء التشغيل لتجنب تقييم علامات المياه. انظر ترخيص القياس .
- تحقق من متطلبات الإطار في دليل التثبيت .
الإدخالات المدعومة (مختارة): 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 - خرائط أسماء النمط المتطابقة مع تعريفات الوجهة للحصول على مظهر موحد.
تداول الخيارات الثنائية & Page Layout
قم بتشغيل كل وثيقة على **الصفحة الجديدة ** ، **المستمرة ** أو إضافة / إضافة صفحة:
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);
Stream-First / ارتفاع الحجم
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
}
نصائح الأداء
- بوتفليقة في الذاكرة؛ الاتصال
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 هي مكتبة مستقلة.