Tengo un problema donde tengo una tabla (PdfPTable) que puede extenderse más allá de la longitud de la página. He intentado buscar cómo "dividir" una tabla en más de una página, pero iTextSharp está bastante poco documentado en esta área. ¿Alguien sabe cómo hacer esto sin elegir una posición Y arbitraria en la página y decirle que se divida si está allí?iTextSharp: SplitLate/SplitRows?
Revisé las propiedades SplitLate
y SplitRows
, pero no hay documentación sobre lo que hacen. EDITAR No hacen nada.
Gracias!
EDITAR
Busco para cortar la tabla por la mitad a lo ancho como la tabla siempre se ajuste a lo ancho de la página. Esto quiere decir que quiero que las filas que no se ajustan verticalmente se extiendan a la siguiente página debajo de él.
Edit2
Aquí hay algo de código:
Public Sub BuildPrintableDocument
Dim doc As New Document(PageSize.LETTER, 0, 0, 0, BOTTOM_MARGIN)
Dim writer As PdfWriter = PdfWriter.GetInstance(doc, _
New FileStream("invoice.pdf", FileMode.Create)
Dim footer As New HeaderFooter(New Phrase("www.columbussupply.com", _
footerFont), False)
footer.Border = Rectangle.NO_BORDER
footer.Alignment = HeaderFooter.ALIGN_CENTER
doc.Footer = footer
doc.Open()
....
Dim items As PdfPTable = NewItemTable()
Dim count As Integer = 0
For Each oi As OrderItem In TheInvoice.Items
If oi.Status <> OrderItem.OrderItemStatus.Cancelled Then
Dim qty As New PdfPCell(New Phrase(oi.Quantity, mainFont))
qty.HorizontalAlignment = Element.ALIGN_CENTER
qty.Padding = ITEMS_PADDING
'...instantiate 3 other cells here (removed for repetitiveness)'
items.AddCell(qty)
items.AddCell(desc)
items.AddCell(price)
items.AddCell(total)
End If
Next
items.WriteSelectedRows(0, -1, LEFT_MARGIN, GetItemsStartY, _
writer.DirectContent)
End Sub
Protected Function NewItemTable() As PdfPTable
Dim items As PdfPTable = New PdfPTable(4)
Dim headers() As String = {"QTY", "DESCRIPTION", "PRICE", "TOTAL"}
For Each s As String In headers
Dim cell As New PdfPCell(New Phrase(s, mainFont))
cell.HorizontalAlignment = Element.ALIGN_CENTER
items.AddCell(cell)
Next
items.TotalWidth = ITEMS_TOTAL_WIDTH
items.SetWidths(New Single() {QTY_COL_WIDTH, DESC_COL_WIDTH, _
PRICE_COL_WIDTH, TOTALS_COL_WIDTH})
Return items
End Function
¿Hay algún lugar especial que deba poner eso en el proceso? como después de escribir las filas, antes, ¿dónde? – Jason
Lo siento, Jason, he entendido mal tu pregunta. Edité mi resonse, que espero sirva de ayuda. –
gracias por la edición ... sí, he pasado por ese tutorial 100 veces y fue en vano. Ese capítulo habla sobre el uso de tablas simples, y necesito usar el PdfPTable para poder posicionarlo absolutamente. En este momento la tabla que acabo de ejecutar justo al borde de la página, que es una mierda ...: \ – Jason