Fusionador de documents
El Aspose.Words Document Merger for .NET et permet programàticament unir qualsevol nombre de documents compatibles amb Word en una única sortida mantenint el format, els estils, el disseny de pàgina, les capçaleres/pies de pàgina i els camps. Els usos típics inclouen l’assemblatge d’informes, l’agrupació d’exhibicions de contractes o l’agregació de contingut generat per a l’arxiu.
Funciona sense interfície gràfica a Windows, Linux i macOS. No cal Microsoft Office.
Instal·lació i configuració
- Instal·la el paquet NuGet
Aspose.Words. - Aplica la llicència per consum a l’inici de l’aplicació per evitar marques d’avaluació. Vegeu Llicència per consum .
- Verifica els requisits del marc en el Guia d’instal·lació .
IDEs: Visual Studio 2017–2026, JetBrains Rider, MonoDevelop.
Entrades / Sortides compatibles: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, i Word 2007 XML.
Inici ràpid: Afegir diversos documents
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");Modes de format d’importació:
- KeepSourceFormatting — conserva els estils i el format directe de cada origen (ideal per a insercions de marca).
- UseDestinationStyles — assigna noms d’estil idèntics a les definicions de destinació per a un aspecte uniforme.
Secció i disseny de pàgina controlats
Inicia cada document a Pàgina nova, Continua, o Pàgina parella/impare:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPageUnifica marges/mida de pàgina copiant PageSetup d’una secció de plantilla:
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;
}Capçaleres, peus de pàgina i marques d’aigua
Mantén les capçaleres/peus de pàgina d’origen, o substitueix‑les per un conjunt mestre després de la fusió:
// 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);
}Camps, referències creuades i índex
Després de combinar, actualitzeu els camps perquè els números de pàgina, les referències i Taula de continguts coincideixin amb el nou disseny:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table paginationSi mantens un únic índex mestre, insereix‑lo una sola vegada i deixa‑l que es reconstrueixi automàticament:
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();Fusions Stream‑First / d’alta volum
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
}Consells de rendiment:
- Afegits per lots en memòria; crida
UpdateFields()una vegada al final. - Prefereix UseDestinationStyles quan voleu un estil coherent a través de desenes d’entrades.
- Alliberar
Documentinstàncies prematurament en pipelines llargs per reduir la memòria màxima.
Millors pràctiques
- Pre‑validar per corrupció/contrasenyes per evitar combinacions parcials.
- Tria KeepSourceFormatting quan la fidelitat de la marca importa; tria UseDestinationStyles per a un aspecte uniforme.
- Insereix un salt de secció abans de cada annex per protegir la configuració de la pàgina.
- Unifica capçaleres/peus de pàgina després d’afegir si voleu una única plantilla corporativa.
- Actualitza camps & TOC com a pas final.
- Per lots molt grans, dividiu-los en grups i combineu els grups per mantenir estable la memòria.
FAQ
- Puc forçar que cada font comenci en una pàgina nova? Sí. Insereix una secció o un salt de pàgina abans de cada
AppendDocumentcrida o configuracióSectionStartaNewPage. - Com puc mantenir els estils de destinació mentre importo? Utilitza
ImportFormatMode.UseDestinationStylesaAppendDocument. - S’actualitzaran automàticament els números de pàgina i el TOC? Crida
UpdateFields()(iUpdatePageLayout()per a una paginació precisa) després de totes les afegides. - Cal Office? No. Aspose.Words és una biblioteca independent.