2016-11-11 1 views
0

Я написал следующий код для генерации PDF:Как сломать PDF Страница в itextsharp 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) 

Когда выше кода выполняются в идеальном порядке и дает выход, но он не показывает, если страница 1 завершена.

enter image description here

В изображении выше вы можете проверить, что он не показывает полные записи.

Я хочу сломать страницу, если страница заполнена или увеличить высоту страницы.

Как перенести данные на вторую страницу, если моя первая страница заполнена?

+0

Если вы хотите iTextSharp распространять таблицу по разным страницам, то почему вы используете 'WriteSelectedRows()'? Почему вы просто не добавляете 'table' в' document'? Где вы узнали, как написать iTextSharp-код? Можете ли вы уволить своего учителя или выбросить книгу, которую вы читали? –

+0

Потому что мне нужно написать 3 таблицы в 1 строке, а затем перерыв на новую строку и после закрытия первой страницы, затем нужно перенаправить на 2-ю страницу. – deepak

+0

Этот комментарий не является ответом на мой вопрос. То, что вы говорите, не имеет смысла, и вы доказываете это своим ответом: 'document.Add (table)' был именно тем, что вам нужно. –

ответ

0

У меня есть решение.

Ниже мой новый код:

Dim table As PdfPTable 
     table = New PdfPTable(4) 

     table.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER 
     table.TotalWidth = 400.0F 
     table.LockedWidth = True 

    For k As Integer = 0 To ds.Tables(0).Rows.Count - 1 

     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 = 1 
     cell.HorizontalAlignment = 0 
     cell.Border = iTextSharp.text.Rectangle.NO_BORDER 
     cell.Padding = 20.0F 
     table.AddCell(cell) 
    Next 

document.Add(table) 
document.Close() 
ShowPdf(filename) 
+0

И это именно то, что я имел в виду в своем комментарии. –