VB. Net Открыть XML Условный разрыв страницы - PullRequest
0 голосов
/ 27 февраля 2020

Я использую библиотеку Open XML для автоматической генерации файлов Word. У меня есть функция, которая берет группу файлов и объединяет их в один документ. Когда я объединяю новый файл в документ, я хочу, чтобы каждый файл начинался на новой странице. Но я не хочу иметь пустых страниц. Код, который у меня есть, в основном работает, но возникает проблема: если объединяемый файл представляет собой заполненную страницу, то разрыв страницы все равно добавляется, в результате чего добавляется пустая страница. Я не уверен, как лучше всего справиться с этим, чтобы предотвратить добавление пустых страниц. Вот мой код:

Public Sub MergeFiles(ByVal filePaths As List(Of String), ByVal fileName As String)
        Dim newFile As String = HttpRuntime.AppDomainAppPath & "PDF_Templates\TempFolder\catalog-" & Guid.NewGuid.ToString & ".docx"
        File.Copy(fileName, newFile)
        Dim counter As Integer = 0

        For Each filePath As String In filePaths
            Dim wordDoc As WordprocessingDocument = WordprocessingDocument.Open(newFile, True)
            Using wordDoc
                Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
                Dim altChunkId As String = "altChunkId" & counter
                Dim chunk As AlternativeFormatImportPart = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId)
                Dim fileStream As FileStream = File.Open(filePath, FileMode.Open)

                Using fileStream
                    chunk.FeedData(fileStream)
                End Using

                Dim AltChunk As AltChunk = New AltChunk()
                AltChunk.Id = altChunkId
                ' Dont add a page break to the first page.
                If counter > 0 Then
                    Dim last As OpenXmlElement = wordDoc.MainDocumentPart.Document.Body.Elements().LastOrDefault(Function(e) TypeOf e Is Paragraph OrElse TypeOf e Is AltChunk)
                    last.InsertAfterSelf(New Paragraph(New Run(New Break() With {
                                    .Type = BreakValues.Page
                                    })))
                End If

                mainPart.Document.Body.InsertAfter(Of AltChunk)(AltChunk, mainPart.Document.Body.Elements(Of Paragraph).Last())
                mainPart.Document.Save()
                wordDoc.Close()
            End Using
            counter = counter + 1
        Next


    End Sub
...