我尝试使用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
任何人都可以提供帮助? 非常感谢
答案 0 :(得分:1)
您的代码中出现了一些问题。例如:您为每个页面创建一个新的headerIMG
对象。这意味着相同的图像字节将一遍又一遍地添加到PDF中。您应该在headerIMG
方法1>之外声明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提供的评论。为什么需要子表?您可以轻松地为包含图像的单元格定义行跨。