Ho un problema in cui ho una tabella (PdfPTable) che possono estendersi oltre la lunghezza della pagina. Ho provato a cercare come "dividere" un tavolo su più di una pagina, ma iTextSharp è piuttosto scarsamente documentato in quest'area. Qualcuno sa come farlo senza scegliere una posizione Y arbitraria sulla pagina e dirgli di dividere se è lì?iTextSharp: SplitLate/SplitRows?
Ho esaminato le proprietà SplitLate
e SplitRows
, ma non c'è documentazione su ciò che fanno. EDIT Non fanno nulla.
Grazie!
EDIT
sto cercando di tagliare il tavolo a metà nel senso della larghezza della tabella sarà sempre in base alla larghezza della pagina. Questo per dire che voglio che le righe che non si adattano verticalmente si estendano alla pagina successiva sotto di essa.
EDIT2
Ecco po 'di codice:
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
c'è qualche posto speciale in cui devi metterlo? come dopo aver scritto le righe, prima, dove? – Jason
Scusa Jason, ho frainteso la tua domanda. Ho modificato la mia risposta che spero aiuti. –
grazie per la modifica ... sì, ho passato il tutorial a 100x e senza risultati. Questo capitolo parla dell'utilizzo di tabelle semplici e ho bisogno di usare PdfPTable in modo da poterlo posizionare in modo assoluto. In questo momento il tavolo è appena uscito dal bordo della pagina, il che fa schifo ....: \ – Jason