【发布时间】:2016-11-11 14:09:51
【问题描述】:
我已经编写了以下代码来生成pdf:
path = Server.MapPath("PDF-Files")
filename = path + "/mydata.pdf"
document = New iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 5.0F, 5.0F, 5.0F, 5.0F)
Dim bfTimes As BaseFont
Dim times As iTextSharp.text.Font
bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, False)
times = New iTextSharp.text.Font(bfTimes, 8, iTextSharp.text.Font.NORMAL)
Dim writer As PdfWriter
writer = PdfWriter.GetInstance(document, New FileStream(filename, FileMode.Create))
Dim ev As New itsEvents
writer.PageEvent = ev
If document.IsOpen Then
document.Close()
End If
document.Open()
Dim spacing As Integer
spacing = 0
Dim curY, lineHeight As Double
curY = document.Top
lineHeight = 0
Const maxPerLine As Integer = 3
For k As Integer = 0 To ds.Tables(0).Rows.Count - 1
Dim table As PdfPTable
table = New PdfPTable(3)
table.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER
table.TotalWidth = 200.0F
table.LockedWidth = True
Dim cell As PdfPCell
cell = New PdfPCell()
cell.AddElement(New iTextSharp.text.Paragraph(ds.Tables(0).Rows(k)("id").ToString(), times))
cell.AddElement(New iTextSharp.text.Paragraph(ds.Tables(0).Rows(k)("name").ToString() + " " + dsLabelTemp.Tables(0).Rows(k)("city").ToString() + "(" + dsLabelTemp.Tables(0).Rows(k)("post").ToString() + ")", times))
cell.AddElement(New iTextSharp.text.Paragraph(ds.Tables(0).Rows(k)("userpersonal").ToString(), times))
cell.Colspan = 3
cell.HorizontalAlignment = 0
cell.Border = iTextSharp.text.Rectangle.NO_BORDER
cell.Padding = 20.0F
table.AddCell(cell)
table.WriteSelectedRows(0, -1, document.Left + spacing, curY, writer.DirectContent)
spacing = spacing + 200
lineHeight = Math.Max(lineHeight, table.TotalHeight)
If 0 = (k + 1) Mod maxPerLine Then
curY = curY - lineHeight
spacing = 0
lineHeight = 0
End If
Next
document.Close()
ShowPdf(filename)
当上述代码以完美的方式执行并给出输出但未显示 if page 1 completed 时。
在上图中,您可以检查它没有显示完整的记录。
如果页面已满,我想打破页面或增加页面高度。
如果我的第一页已满,我如何将数据传输到第二页??
【问题讨论】:
-
如果您希望 iTextSharp 将表格分布在不同的页面上,那么您为什么使用
WriteSelectedRows()?为什么不直接将table添加到document?您在哪里学习如何编写 iTextSharp 代码?你能解雇你的老师或扔掉你一直在读的书吗? -
因为我需要在 1 行中写 3 个表,然后换行,在接近第一页后需要重定向到第二页。
-
该评论不是我问题的答案。你所说的没有意义,你用你的答案证明了这一点:
document.Add(table)正是你所需要的。