1

J'essaie de fusionner des documents Word en un seul document Word à l'aide de DocumentBuilder d'OpenXml Powertools. Ce est le code utilisé pour la fusion:Remplacer le saut de section par saut de page

var sources = new List<Source>(); 
       foreach (var doc in documents) 
       { 
        var wmlDoc = new WmlDocument(doc.Path); 

        sources.Add(new Source(wmlDoc, doc.PageBreak)); 
       } 

       var newDestinationDocument = DocumentBuilder.BuildDocument(sources); 

Chaque objet de documents contient un chemin vers le document et un bool qui dit si je veux ou non un saut de page inséré après le document. Ce code fonctionne, mais le problème est que j'obtiens un saut de section au lieu d'un saut de page. Je sais que le second paramètre du constructeur Source représente un booléen Section Break, mais j'ai besoin d'un saut de page à la place.

C'est ce que le document résultat contient après meging: enter image description here

Et je besoin de quelque chose comme ceci:

enter image description here

Je ne peux pas utiliser altChunks, Interop ou toute bibliothèque payé pour cela.

Répondre

1

Vous devez ajouter

<w:br w:type="page" /> 

pour le début ou la fin du document paragraphe du document que vous voulez séparer avec des sauts de page.

Avant d'appliquer votre code essayez les suivantes -

WordprocessingDocument myDoc = WordprocessingDocument.Open(@"file path", true); 
MainDocumentPart mainPart = myDoc.MainDocumentPart; 
OpenXmlElement last = myDoc.MainDocumentPart.Document 
    .Body 
    .Elements() 
    .LastOrDefault(e => e is Paragraph || e is AltChunk); 
last.InsertAfterSelf(new Paragraph(
    new Run(
     new Break() { Type = BreakValues.Page }))); 
mainPart.Document.Save(); 

J'ai choisi le dernier paragraphe du fichier. Vous pouvez choisir de faire la même chose pour le premier document en fonction de vos besoins.

Le code ci-dessus va ajouter le <w:br w:type="page" /> qui ajoute un saut de page manuel.

Vous pouvez également essayer d'utiliser <w:pageBreakBefore/> au dernier paragraphe des documents qui spécifie au client (MS Word etc.) que les paragraphes qui suivent ce tag seront rendus sur une nouvelle page.

+0

Cela fonctionne, merci. Mais j'ai mis en place un peu différent, le fait est que cela va modifier mon document et si je veux le réutiliser sans saut de page, je dois trouver le dernier paragraphe et le supprimer, et je ne le veux pas. Ce que j'ai fait était de créer un document vide et d'ajouter le paragraphe qui ne contient que des sauts de page. Ensuite, quand je veux un saut de page après un document docx, il suffit d'ajouter dans la liste 'sources' la page vide avec saut de page, semble bien fonctionner jusqu'à présent. – Simonca

+0

Façon intelligente. Agréable. – Flowerking