iTextSharp添加没有外部边框的子表

时间:2015-07-15 14:37:47

标签: vb.net itextsharp

我尝试使用ItextSharp从我的网络应用程序创建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

任何人都可以提供帮助? 非常感谢

1 个答案:

答案 0 :(得分:1)

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

此外:您定义的BorderWidth为0.如PDF规范中所定义,线宽为0并不意味着没有线。请阅读ISO-32000-1,第8.4.3.2节和第34条;线宽":

  

线宽为0表示可以在器件分辨率下渲染的最细线:1个器件像素宽。

如果您不想要边框,请告诉iText您不想要边框:

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

你看到我改变了什么吗?

另外,请阅读How to create a solution file (.sln) from a Web Site in Visual Studio 2010提供的评论。为什么需要子表?您可以轻松地为包含图像的单元格定义行跨。