首页 > 解决方案 > VB.Net OpenXML 条件分页符

问题描述

我正在使用 OpenXML 库来自动生成 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

标签: asp.netvb.netms-wordopenxmlopenxml-sdk

解决方案


推荐阅读