我正在创建一个PDF表格,我可以管理当表格需要多个页面时会发生什么:
iTextsharp - draw a line at the end and start of a page with tables
如果表需要另一页,那么在插入新页面之前,我会在实际页面上绘制最后一行。
现在我需要在新页面上画一条顶线,但我不知道哪个方法调用。我正在尝试这样的事情:
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 footer As Integer = widths.Length - table.FooterRows
Dim header As Integer = table.HeaderRows - table.FooterRows + 1
Dim ultima As Integer = footer - 1
If last <> -1 Then
Dim line As PdfContentByte
line = pdfWrite.DirectContent
line.SetLineWidth(0.5)
line.MoveTo(xStart, curY)
line.LineTo(xEnd, curY)
line.Stroke()
'canvases(PdfPTable.BASECANVAS).Rectangle(rect)
End If
End Sub
End Class
其中xStart和xEnd是全局变量,左右边距加上或减去一个值。
我不知道如何调整线
canvases(PdfPTable.BASECANVAS).Rectangle(rect)
因为该行来自绘制Rectangle的Java示例,我只需要一行
和行
If last <> -1 Then
检测到网页的最后一行,我需要检测新网页的第一行
答案 0 :(得分:1)
我不确定我是否正确理解了您的问题,但是:
IPdfPTableEvent
。相反,我会使用IPdfPTableEventSplit IPdfPTableEvent
。相反,我会使用IPdfPTableEventAfterSplit 创建事件时,我会传递Document
和PdfWriter
对象。我会通过询问当前页面尺寸的Document
对象来获取我需要的坐标,并且我会使用PdfWriter
来添加线条。
但是,这不是你问题的答案。您似乎知道如何绘制矩形,但您不知道如何绘制线条。这很简单:
PdfContentByte cb = canvases(PdfPTable.BASECANVAS)
cb.MoveTo(x1, y1)
cb.LineTo(x2, y2)
cb.Stroke()
您可以更改各种属性,例如行宽,如下所示:
PdfContentByte cb = canvases(PdfPTable.BASECANVAS)
cb.SaveState()
cb.SetLineDash(8, 4, 0)
cb.SetLineWidth(2.0f)
cb.MoveTo(x1, y1)
cb.LineTo(x2, y2)
cb.Stroke()
cb.RestoreState()
至于x1
,y1
,x2
和y2
的值,您必须根据通过{{1}传递给您的值来定义它们}和widths
参数。