Mam problem, w którym mam tabelę (PdfPTable), która może rozciągać się poza długość strony. Próbowałem już sprawdzić, jak "podzielić" tabelę na więcej niż jedną stronę, ale iTextSharp jest dość słabo udokumentowany w tej dziedzinie. Czy ktoś wie, jak to zrobić, nie wybierając arbitralnej pozycji Y na stronie i nakazując jej podzielenie, jeśli tam jest?iTextSharp: SplitLate/SplitRows?
Zajrzałem do właściwości SplitLate
i SplitRows
, ale nie ma dokumentacji na temat tego, co one robią. EDYCJA Nic nie robią.
Dzięki!
EDIT
szukam przeciąć na pół wszerz tabeli jako tabeli zawsze dopasować szerokość strony. To znaczy, że chcę, aby wiersze, które nie pasują pionowo, rozciągały się na następną stronę pod nim.
EDIT2
Oto niektóre kodu:
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
Czy jest jakieś specjalne miejsce, które trzeba w to włożyć? jak po napisaniu wierszy, wcześniej, gdzie? – Jason
Przepraszam Jason, źle zrozumiałem twoje pytanie. Zmontowałem moją odpowiedź, która, mam nadzieję, pomaga. –
dzięki za edycję ... tak, przeżyłem ten samouczek 100x i na próżno. Ten rozdział mówi o używaniu prostych tabel i muszę użyć PdfPTable, aby móc go całkowicie ustawić. W tej chwili tabela, którą właśnie uruchomiłem tuż przy krawędzi strony, jest do bani ...: \ – Jason