asp.net - 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
解决方案
推荐阅读
- linux-kernel - Linux 内核无法在 JTAG 调试器下启动
- wpf - 如何从 Prism 中的 RequestNavigate 方法获取回调?
- python-requests - WooCommerce API 通过请求使用环回代理
- ruby-on-rails - Rails 6:从表单输入动态创建/切换/迁移数据库
- pandas - 从具有不同对象的列中,我希望每个对象都有很多列,带有熊猫
- javascript - 将数据属性从 Shopify Schema 块传递到 JS
- pandas - Pandas:从最后一行开始,按升序,删除所有满足多列条件的行
- javascript - Iframe 中的 SharedArrayBuffer
- python - 你好,我如何使用opencv从图像中分割白色矩形对象?
- arrays - Postgresql 递归更新 jsonb 键