iTextsharp - 在表格的末尾和开头画一条线

时间:2016-11-15 22:33:44

标签: vb.net itext

从表格中选择记录我为记录的每个第一个字母创建了iTextsharp的表格

在图片上有一张“G”字母的表格:

“G”是一排6个细胞

然后一行带有“标题”的6个单元格

然后是带记录的行

行的单元格只需要左右边框。

但我需要绘制或“关闭”页面最后一行的行,并绘制或“打开”下一页第一行的行。

我阅读了很多帖子,但我无法弄清楚解决方案

我知道如何绘制图形线以及如何找到坐标或如何设置底部或顶部边框,但我不知道如何检测分页符或是否可以强制管理此情况页脚或标题仅适用于图片之类的情况。

Steven

该类的代码适应VB 感谢COeDev的支持

现在我只需要解析Rectangle(或绘制一条线)因为在VB.NET上不一样(标记为注释的行)

Imports iTextSharp.text.pdf

Public Class LineaBottom
Implements IPdfPTableEvent

Public Sub TableLayout(table As PdfPTable, widths As Single()(), heights() As Single, headerRows As Integer, rowStart As Integer, canvases() As PdfContentByte) Implements IPdfPTableEvent.TableLayout
    'Throw New NotImplementedException()

    Dim columns As Integer
    Dim rect As Rectangle
    Dim footer As Integer = widths.Length - table.FooterRows
    Dim header As Integer = table.HeaderRows - table.FooterRows + 1
    Dim ultima As Integer = footer - 1

    If ultima <> -1 Then

        columns = widths(ultima).Length - 1
        rect = New Rectangle(widths(ultima)(0), heights(ultima), widths(footer - 1)(columns), heights(ultima + 1))
        'rect.BorderColor = BaseColor.BLACK
        'rect.BorderWidth = 1
        'rect.Border = Rectangle.TOP_BORDER
        'canvases(PdfPTable.BASECANVAS).Rectangle(rect)

    End If
End Sub

我希望此代码能够为其他人服务,因为互联网上没有太多信息

2 个答案:

答案 0 :(得分:1)

这应该对您有所帮助:itextsharp: how to show the bottom line of a table with property HeaderRows=1 if border bottom of the row is not set?

您还需要添加一些代码来绘制额外的标题行 e.g:

columns = widths[0].Length - 1;
rect = new Rectangle(widths[0][0], heights[0], widths[0][columns], heights[0]);
rect.BorderColor = Color.BLACK;
rect.BorderWidth = 1;
rect.Border = Rectangle.TOP_BORDER;
canvases[PdfPTable.BASECANVAS].Rectangle(rect);

4.1.6.0

答案 1 :(得分:1)

我找到了解决方案,不需要新班级

Dim heightActualLetter, verticalSpaceAvailable As Integer
heightActualLetter = table.TotalHeight
verticalSpaceAvailable = pdfWrite.GetVerticalPosition(False) - pdfDoc.BottomMargin
If heightActualLetter > verticalSpaceAvailable Then

    Dim finalLine As PdfContentByte
    finalLine = pdfWrite.DirectContent

    Dim curY As Int32
    curY = pdfWrite.GetVerticalPosition(False)

    finalLine.SetLineWidth(0.5)
    finalLine.MoveTo(xStart, curY)
    finalLine.LineTo(xEnd + 1, curY)
    finalLine.Stroke()
End If

我不知道为什么我需要xEnd + 1上的+1,但也许是因为其他行是0.5我需要向上舍去