J'ai un problème où j'ai une table (PdfPTable) qui peut dépasser la longueur de la page. J'ai essayé de "diviser" une table sur plus d'une page, mais iTextSharp est assez mal documenté dans ce domaine. Est-ce que quelqu'un sait comment faire cela sans choisir une position Y arbitraire sur la page et lui dire de se séparer si c'est là? J'ai examiné les propriétés SplitLate
et SplitRows
, mais il n'y a pas de documentation sur ce qu'elles font. EDIT Ils ne font rien.iTextSharp: SplitLate/SplitRows?
Merci!
EDIT
Je cherche à couper la table en demi-largeur que la table sera toujours adapté à la largeur de la page. C'est-à-dire que je veux que les lignes qui ne tiennent pas verticalement s'étendent à la page suivante en dessous.
EDIT2
Voici quelques code:
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
Y at-il un endroit spécial où vous devez mettre cela dans le processus? comme après avoir écrit les lignes, avant, où? – Jason
Désolé Jason, j'ai mal compris votre question. J'ai édité ma réponse qui, je l'espère, aide. –
merci pour le montage ... ouais j'ai été à travers ce tutoriel 100x et en vain. Ce chapitre parle d'utiliser des tables simples, et j'ai besoin d'utiliser le PdfPTable pour pouvoir le positionner absolument. En ce moment la table que je viens de courir juste au bord de la page, qui suce ....: \ – Jason