Aspose.Words Dokumenter for .NET

Aspose.Words Document Merger for .NET lar deg programmatisk tillegge et hvilket som helst antall Word-kompatible dokumenter i en enkelt utgang, samtidig som du bevarer formatering, stiler, sidesign, header/footers og felt. Typiske bruksområder inkluderer samle rapporter, bundle kontraktutstillinger, eller aggregere generert innhold for arkivering.

Fungerer enkelt på Windows, Linux og macOS. Ingen Microsoft Office kreves.

Installasjon og installasjon

Støttet inntak (selekt): DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.Støtt utganger: DOCX, DOC, PDF, HTML (fixed/flow), MHTML, ODT, RTF, bilder, EPUB, XPS, og mer.

Hurtig start: Legg til flere dokumenter

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

Importerte formater

  • KeepSourceFormatting – bevarer hver kilde stil og direkte formatering (ideal for merket innsett).
  • UseDestinationStyles – kart identiske stilnavn til destinasjonsdefinisjoner for en uniform utseende.

Kontrollert Section & Page Layout

Start hvert dokument på Ny side, Continuous eller Even/Odd Page:

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

Unify margins/side størrelse ved å kopiere PageSetup Fra et template avsnitt:

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 og Watermarks

Hold kildekopper/føtter, eller erstatte dem med en master sett etter fusjon:

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

Felder, kryss-referanser og TOC

Etter å ha fusjonert, oppdaterer feltene slik at sidnummer, referanser og Tabell av innhold matcher den nye layouten:

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

Hvis du opprettholder en enkelt master TOC, legg den inn en gang og la den automatisk gjenopprette:

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

Passordbeskyttede inntak og sikker uttak

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 / Høyvolum Merges

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
}

Utførelsestips

  • Batch appends i minnet; ringer UpdateFields() En gang til slutt.
  • Foretrakk UseDestinationStyles når du vil ha konsekvent styling over dusinvis av inntak.
  • Dispose Document eksempler tidlig i lange rør for å redusere toppminnet.

Håndtering av blandede formater (HTML, PDF, TXT)

  • HTML/MHTML: importer med stiler og bilder (linket eller innebygd).
  • PDF: sider importeres som gjenfløyde innhold hvor det er mulig; komplekse layouter bevares under utgang til faste formater (f.eks. PDF).
  • TXT: vedlegg som flatparagrafer; bruk en basestil etter import for konsistens.

Beste praksis

  • Pre-validate for korrupsjon/passord for å unngå delvis fusjoner.
  • Velg KeepSourceFormatting når merkevaren er trofast; velg UseDestinationStyles for uniform utseende.
  • Skriv inn en seksjonsbrudd før hver append for å beskytte sideinnstillingen.
  • Unify headers/footers etter appending hvis du vil ha en enkelt bedriftsmønster.
  • Oppdaterer felt & TOC som siste trinn.
  • For veldig store partier, delt inn i grupper og fusjon grupper for å holde minnet stabilt.

FAQ

**Kan jeg tvinge hver kilde til å starte på en ny side?**Legg inn et avsnitt eller side brudd før hver AppendDocument Kall eller sett SectionStart til NewPage.

**Hvordan holder jeg destinasjonsstiler mens jeg importerer?**Use ImportFormatMode.UseDestinationStyles I AppendDocument.

**Vil sidnummer og TOC oppdatere automatisk?**Call UpdateFields() (og UpdatePageLayout() for nøyaktig side) etter alle appendene.

**Kan jeg fusionere krypterte inntekter og produsere Kryptert uttak?**Ja, å gi LoadOptions.Password for inntak og bruk PdfSaveOptions.EncryptionDetails (eller OoxmlSaveOptions.Password) for produksjon.

**Er kontoret nødvendig?**No. Aspose.Words er et uavhengig bibliotek.

 Norsk