添加没有外部边框的子表



我试图使用ItextSharp从我的web应用程序创建pdf。为了在pdf的每个页面上创建一个Header部分,我创建了一个局部类,在这里我覆盖了OnEndPage方法。一切都很好,只有一个例外。我把我的标题设计成一个有2列的表格,在第一列我放了一个标志,在第二列我想在多行上显示一些文本;在第二个单元格中,我创建了一个1列几行的子表,但这个子表总是显示我无法删除的外部黑色边框。下面是代码:

    Public Overrides Sub OnEndPage(writer As PdfWriter, document As Document)
    Dim headerIMG As Image = Image.GetInstance(HttpContext.Current.Server.MapPath(logoPath))
    Dim pageSize As Rectangle = document.PageSize
    Dim headerTbl As New PdfPTable(2)
    headerTbl.TotalWidth = 600 
    headerTbl.HorizontalAlignment = Element.ALIGN_CENTER
    Dim cell As New PdfPCell(headerIMG)
    cell.Border = 0 
    cell.PaddingLeft = 10
    cell.PaddingBottom = 10
    headerTbl.AddCell(cell)
    Dim subTable = New PdfPTable(1)
    For Each s As String In HeaderText
        Dim myCell As New PdfPCell(New Paragraph(s))
        myCell.Border = 0
        subTable.AddCell(myCell)
    Next
    subTable.DefaultCell.BorderWidth = 0
    headerTbl.AddCell(subTable)
    headerTbl.WriteSelectedRows(0, -1, 0, pageSize.GetTop(5), writer.DirectContent)
End Sub

有人能帮忙吗?谢谢大家

您的代码中有几个地方是错误的。例如:为每个页面创建一个新的headerIMG对象。这意味着相同的图像字节将一遍又一遍地添加到PDF中。您应该在OnStartPage方法的之外声明headerIMG

更进一步:你定义了一个BorderWidth为0。正如PDF规范中定义的那样,线宽为0并不意味着没有线。请阅读ISO-32000-1,第8.4.3.2节"线宽":

线宽为0表示可以在设备分辨率下呈现的最细的线:1设备像素宽。

如果你不想要边框,告诉ittext你不想要边框:

Dim headerIMG As Image = Image.GetInstance(HttpContext.Current.Server.MapPath(logoPath))
Public Overrides Sub OnStartPage(writer As PdfWriter, document As Document)
    Dim pageSize As Rectangle = document.PageSize
    Dim headerTbl As New PdfPTable(2)
    headerTbl.TotalWidth = 600 
    headerTbl.HorizontalAlignment = Element.ALIGN_CENTER
    Dim cell As New PdfPCell(headerIMG)
    cell.Border = PdfPCell.NO_BORDER
    cell.PaddingLeft = 10
    cell.PaddingBottom = 10
    headerTbl.AddCell(cell)
    Dim subTable = New PdfPTable(1)
    For Each s As String In HeaderText
        Dim myCell As New PdfPCell(New Paragraph(s))
        myCell.Border = PdfPCell.NO_BORDER
        subTable.AddCell(myCell)
    Next
    subTable.DefaultCell.Border = PdfPCell.NO_BORDER
    headerTbl.AddCell(subTable)
    headerTbl.WriteSelectedRows(0, -1, 0, pageSize.GetTop(5), writer.DirectContent)
End Sub

你看到我改变了什么吗?

另外,请阅读neelek提供的评论。你为什么需要一个子桌?您可以轻松地为包含图像的单元格定义行间距。

最新更新