split - iTextSharp : SplitLate/SplitRows?

标签 split itext page-break pdfptable

我遇到一个问题,我的表格 (PdfPTable) 可能会超出页面的长度。我尝试查找如何将表格“拆分”到多个页面上,但 iTextSharp 在这方面的记录非常少。有谁知道如何做到这一点,而不选择页面上的任意 Y 位置并告诉它拆分(如果存在)?

我研究了 SplitLateSplitRows 属性,但没有关于这些属性的文档。 编辑他们什么也不做。

谢谢!

编辑

我希望将表格横向切成两半,因为表格始终适合页面的宽度。这就是说,我希望不垂直适合的行延伸到其下方的下一页。

编辑2

这是一些代码:

Public Sub BuildPrintableDocument
    Dim doc As New Document(PageSize.LETTER, 0, 0, 0, BOTTOM_MARGIN)
    Dim writer As PdfWriter = PdfWriter.GetInstance(doc, _
        New FileStream("invoice.pdf", FileMode.Create)

    Dim footer As New HeaderFooter(New Phrase("www.columbussupply.com", _
        footerFont), False)
    footer.Border = Rectangle.NO_BORDER
    footer.Alignment = HeaderFooter.ALIGN_CENTER
    doc.Footer = footer

    doc.Open()

....

Dim items As PdfPTable = NewItemTable()
Dim count As Integer = 0
    For Each oi As OrderItem In TheInvoice.Items
        If oi.Status <> OrderItem.OrderItemStatus.Cancelled Then
            Dim qty As New PdfPCell(New Phrase(oi.Quantity, mainFont))
            qty.HorizontalAlignment = Element.ALIGN_CENTER
            qty.Padding = ITEMS_PADDING

            '...instantiate 3 other cells here (removed for repetitiveness)'

            items.AddCell(qty)
            items.AddCell(desc)
            items.AddCell(price)
            items.AddCell(total)
        End If
    Next

    items.WriteSelectedRows(0, -1, LEFT_MARGIN, GetItemsStartY, _
        writer.DirectContent)
End Sub


Protected Function NewItemTable() As PdfPTable
    Dim items As PdfPTable = New PdfPTable(4)
    Dim headers() As String = {"QTY", "DESCRIPTION", "PRICE", "TOTAL"}

    For Each s As String In headers
        Dim cell As New PdfPCell(New Phrase(s, mainFont))
        cell.HorizontalAlignment = Element.ALIGN_CENTER
        items.AddCell(cell)
    Next

    items.TotalWidth = ITEMS_TOTAL_WIDTH
    items.SetWidths(New Single() {QTY_COL_WIDTH, DESC_COL_WIDTH, _ 
        PRICE_COL_WIDTH, TOTALS_COL_WIDTH})
    Return items
End Function

最佳答案

如果您希望自动跨页拆分行,则应使用 Document.Add() 将表格添加到文档中。然后 SplitLateSplitRows 将按预期工作。

  1. SplitLate = true(默认)时,表格将在 适合页面的下一行。
  2. SplitLate = false时该行 不完全适合页面的内容将被拆分。
  3. SplitRows = true(默认)不适合页面的行将被分割。
  4. SplitRows = false时,该行将被省略。

所以

  • SplitLate && SplitRows:不适合页面的行将在下一页开始,如果该行也不适合该页面,则最终会拆分。

  • SplitLate && !SplitRows:不适合页面的行将在下一页开始,如果该行也不适合该页面,则将被忽略。

  • !SplitLate && SplitRows:不适合页面的行将被拆分并继续在下一页上,如果对于下一页来说太大,则将再次拆分。

  • !SplitLate && !SplitRows:我对此有点不确定。但从消息来源看来,它与 SplitLate && 相同!SplitRows:不适合页面的行将在下一页开始,如果也不适合该页面,则将被忽略。

    <

但至于你的问题:Document.Add() 仅在不需要绝对定位表格时才可用。但似乎有一种方法可以通过将表添加到 ColumnText 中(它实际上是一个 ColumnText 对象来完成所有表拆分),然后绝对定位那个ColumnText。我还没有研究过,但一旦有更多时间我就会研究:)

关于split - iTextSharp : SplitLate/SplitRows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364435/

相关文章:

android - 如何从字节数组中逐字节获取

java - 正则表达式 - 文字字符串和引号之间的匹配

java - 用空格分割字符串

java - 表格的绝对位置用什么度量单位表示?我可以用厘米来表达这个位置吗?

java - 如何在 itext 7 中将 html 转换为 pdf 时继续特定 div 标签的横向方向?

javascript - 使用 JavaScript 在特殊字符处拆分字符串

c# 使用 iTextSharp 打印 PDF

javascript - 解决内部分页 :avoid

r - 在 Markdown PDF 中,如何在 for 循环的每次迭代后添加分页符?

html - 如何防止最后一页空白?