Fonditore di documenti Aspose.Words per .NET
Le **Aspose.Words Document Merger pour .NET ** vous permet de logiciellement joindre n’importe quel nombre de documents Word-compatibles dans une seule sortie tout en préservant le formatage, les styles, le layout de page, la rubrique/footers, et les champs. Utilisations typiques comprennent des rapports d’assemblage, des expositions contractuelles de bundling, ou l’aggregation du contenu généré pour les archives.
Il fonctionne sans cache sur Windows, Linux et macOS. aucun Microsoft Office n’est requis.
Installation et configuration
- Installez le paquet NuGet
Aspose.Words
. - Appliquer une licence mesurée à la start-up de l’application pour éviter les marques d’évaluation. Voir Licencement Mesuré .
- Vérifiez les exigences du cadre dans le Guide d’installation .
Supporté : DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.Les sorties supportées sont: DOCX, DOC, PDF, HTML (fix/flow), MHTML, ODT, RTF, images, EPUB, XPS et plus encore.
Démarrage rapide : ajouter plusieurs documents
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");
Modes de format d’importation
- KeepSourceFormatting – préserve les styles de chaque source et le formatage direct (idéal pour les inserts marqués).
- UseDestinationStyles — maps identiques noms de style aux définitions de la destination pour un look uniforme.
Section contrôlée & Page Layout
Commencez chaque document sur ** Nouvelle page ** , **Continuel ** ou Even/Odd Page:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage
Unifier les marges / la taille de la page en copiant PageSetup
À partir d’une section 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;
}
Chevaux, pieds et marques d’eau
Gardez les chevaux de source / pieds, ou les remplacez par un maître après la fusion:
// 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);
}
Champs, références croisées et TOC
Après la fusion, les champs d’actualisation permettent de répondre aux numéros de pages, aux références et à Table de contenu avec le nouveau layout:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table pagination
Si vous entretenez un seul master TOC, entrez-le une fois et laissez automatiquement récupérer:
var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u"); // classic TOC switch set
master.UpdateFields();
Password-Protected Inputs et Secure Output
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 de volume élevé
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
}
Tipes de performance
- Batch appends dans la mémoire ; appeler
UpdateFields()
Une fois à la fin. - Préférez UseDestinationStyles lorsque vous voulez un style cohérent sur des dizaines d’entrée.
- Dispose
Document
instances tôt dans les longs pipelines pour réduire la mémoire de pointe.
Traitement des formats mixtes (HTML, PDF, TXT)
- HTML/MHTML : importation avec des styles et des images (linqués ou intégrés).
- PDF : les pages sont importées en tant que contenu réfléchis lorsque cela est possible ; les layouts complexes sont conservés pendant la sortie dans des formats fixes (par exemple, PDF).
- TXT : appliqué en termes de paragraphes plates; application d’un style de base après importation pour la cohérence.
Migliori pratiche
- Pré-validation pour la corruption / mot de passe pour éviter les fusions partielles.
- Choisissez **KeepSourceFormatting ** lorsque la fidélité de la marque est pertinente; sélectionnez UseDestinationStyles pour un look uniforme.
- Insérez une section break avant chaque annexe pour protéger la configuration de page.
- Unify headers/footers après l’affichage si vous voulez un seul modèle d’entreprise.
- Mise à jour des champs & TOC comme la dernière étape.
- Pour de très grandes batailles, divisez-les en groupes et fusionnez-le pour maintenir la mémoire stable.
FAQ
**Puis-je forcer chaque source à commencer sur une nouvelle page?**Entrez une section ou une page brisée avant chaque AppendDocument
Appeler ou configurer SectionStart
à NewPage
.
**Comment puis-je garder les styles de destination pendant l’importation?**Utiliser ImportFormatMode.UseDestinationStyles
dans AppendDocument
.
**Vous souhaitez mettre à jour automatiquement les numéros de page et TOC?**Appel UpdateFields()
(et UpdatePageLayout()
pour une page précise) après tous les appendices.
**Puis-je fusionner des entrées cryptées et produire des outils chiffrés?**Oui, fournir LoadOptions.Password
Pour les entrées et l’utilisation PdfSaveOptions.EncryptionDetails
(ou OoxmlSaveOptions.Password
) pour la production.
**Le bureau est-il nécessaire?**No. Aspose.Words est une bibliothèque autonome.