1

OpenXml PowertoolsのDocumentBuilderを使用して、いくつかのワードドキュメントを1つのワードドキュメントにマージしようとしています。 これは、マージに使用されるコードです:改ページを改ページに置き換えます。

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

各オブジェクトdocumentsからは、私は、文書の後に挿入改ページをしたいかどう言う文書とブールへのパスが含まれています。

このコードは動作していますが、問題はページ区切りの代わりにセクション区切りが得られることです。Sourceコンストラクタの2番目のパラメータがセクション区切りブールを表していますが、代わりに改ページが必要です。

これは結果文書はmeging後に含まれているものです: enter image description here

をそして、私はこのような何か必要があります:私はこのためにaltChunksInteropまたは有料のライブラリを使用することはできません

enter image description here

を。

答えて

1

あなたが改ページで分けたい文書の文書段落の先頭または終わりのため

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

を追加する必要があります。

あなたのコードを適用する前には、次のことを試してください -

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

私は、ファイルの最後の段落を選択しました。あなたの要件に基づいて、文書の最初のものについても同じことをすることができます。

上記のコードでは、マニュアルページ区切りを追加する<w:br w:type="page" />が追加されます。

<w:pageBreakBefore/>を、このタグに続く段落が新しいページに表示されることをクライアントに指定する文書の最後の段落(MS Wordなど)にも使用できます。

+0

ありがとうございます。しかし、少し違って実装しましたが、これは私の文書を変更し、ページ区切りなしで再利用したい場合、最後の段落を見つけて削除する必要があります。私が何をしたのは、空のドキュメントを作成し、ページ区切りのみを含む段落を追加することでした。次に、docxドキュメントの後にページ区切りをしたいときに、単純に 'sources'リストに空白のページ区切りを追加して、今までは正常に動作しているようです。 – Simonca

+0

スマートな方法。ニース。 – Flowerking