1

OpenXml Powertools의 DocumentBuilder를 사용하여 일부 단어 문서를 단일 단어 문서로 병합하려고합니다.페이지 나누기로 바꾸기

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 생성자의 두 번째 매개 변수는 섹션 나누기 bool을 나타내지 만 대신 페이지 나누기가 필요합니다. enter image description here

그리고는 다음과 같이해야합니다 :

이것은 결과 문서가 meging 이후에 포함 된 내용입니다

enter image description here

내가 사용할 수 없습니다 altChunks, Interop 또는 이것에 대한 지불 된 라이브러리입니다.

답변

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