Aspose.Words Document Merger untuk .NET

Aspose.Words Document Merger untuk .NET membolehkan anda secara programmatik menyambungkan mana-mana bilangan dokumen yang kompatibel dengan Word ke dalam satu output sambil mengekalkan pemformatan, gaya, tataletak halaman, tajuk / kaki, dan medan. kegunaan biasa termasuk mengumpulkan laporan, mengikat pameran kontrak, atau mengumpul kandungan yang dihasilkan untuk arkib.

Ia berfungsi dengan lancar pada Windows, Linux, dan macOS. Tiada Microsoft Office diperlukan.

Pemasangan dan Setup

  • Pemasangan Pakej NuGet Aspose.Words.
  • Permohonan lesen yang diukur pada permulaan aplikasi untuk mengelakkan penilaian watak. lihat Lisensi berukuran .
  • Semak keperluan rangka kerja dalam Panduan Pemasangan .

Masuk yang disokong (pilih): DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.Output yang disokong: DOCX, DOC, PDF, HTML (Fixed/flow), MHTML, ODT, RTF, imej, EPUB, XPS, dan banyak lagi.

Mulakan Cepat: Menambah Dokumen Berbilang

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");

Mod Pengimportan Format

  • KeepSourceFormatting – mengekalkan gaya setiap sumber dan pemformatan langsung (ideal untuk entri jenama).
  • UseDestinationStyles - peta nama gaya yang sama dengan definisi destinasi untuk penampilan seragam.

Bahagian Terkawal & Page Layout

Mulakan setiap dokumen pada ** Halaman Baru**, ** Berterusan** atau ** Menambah/Tambah halaman**:

var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage

Unify margin / saiz halaman dengan menyalin PageSetup Dari bahagian template:

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;
}

Kepala, kaki, dan tanda air

Simpan kepala sumber / kaki, atau menggantikan mereka dengan set master selepas penggabungan:

// 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);
}

Lapangan, rujukan silang, dan TOC

Selepas penggabungan, kemas kini medan supaya nombor halaman, rujukan, dan Jadual Kandungan sepadan dengan tataletak baru:

master.UpdateFields();
master.UpdatePageLayout();        // ensures accurate page count
master.UpdateTableLayout();       // improves complex table pagination

Jika anda mengekalkan satu master TOC, masukkan sekali dan biarkan ia semula secara automatik:

var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u");  // classic TOC switch set
master.UpdateFields();

Kata laluan dilindungi input & output selamat

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 / Merges Volume Tinggi

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
}

Tag: tips prestasi

  • Batch menyambung dalam memori; panggilan UpdateFields() sekali pada akhir.
  • Lebih suka UseDestinationStyles apabila anda mahu gaya yang konsisten di seluruh puluhan input.
  • Dispose Document contoh awal dalam paip panjang untuk mengurangkan memori puncak.

Mengendalikan format campuran (HTML, PDF, TXT)

  • HTML / HTML: import dengan gaya dan imej (terhubung atau tertanam).
  • PDF: halaman diimport sebagai kandungan semula apabila mungkin; tataletak kompleks disimpan semasa output ke format tetap (contohnya, PDF).
  • TXT: dilampirkan sebagai perenggan rata; gunakan gaya asas selepas import untuk konsistensi.

amalan terbaik

  • Pre-validate untuk rasuah / kata laluan untuk mengelakkan penggabungan sebahagian.
  • Pilih KeepSourceFormatting apabila kebolehpercayaan jenama penting; pilih UseDestinationStyles untuk penampilan seragam.
  • Masukkan putus seksyen sebelum setiap lampiran untuk melindungi tetapan halaman.
  • Unify headers/footers selepas menyambung jika anda mahu satu templat korporat.
  • Memperbaharui medan & TOC sebagai langkah terakhir.
  • Untuk batch yang sangat besar, dibahagikan kepada kumpulan dan menggabungkan kumpulan untuk mengekalkan memori yang stabil.

FAQ

**Bolehkah saya memaksa setiap sumber untuk memulakan pada halaman baru?**Ya. Masukkan bahagian atau halaman pecah sebelum setiap AppendDocument Panggilan atau set SectionStart kepada NewPage.

**Bagaimana saya mengekalkan gaya destinasi semasa mengimport?**Use ImportFormatMode.UseDestinationStyles dalam AppendDocument.

**Adakah nombor halaman dan TOC akan dikemas kini secara automatik?**Call UpdateFields() (dan UpdatePageLayout() untuk halaman yang tepat) selepas semua appends.

**Bolehkah saya menggabungkan input yang disulitkan dan menghasilkan output yang dikodkan?**Tag: menyediakan LoadOptions.Password untuk input dan penggunaan PdfSaveOptions.EncryptionDetails (atau OoxmlSaveOptions.Password) untuk pengeluaran.

**Adakah pejabat diperlukan?**No. Aspose.Words ialah perpustakaan yang berasingan.

 Melayu