Я создаю документ с itext7 в vb.net.Документ является напоминанием об оплате.Документ содержит от 1 до многих позиций (я не знаю, сколько позиций будет у документа в конце).Иногда может случиться, что позиция не содержит суммы.И я хочу удалить эту позицию.
Позиции напоминания выглядят, например, следующим образом:
CustomerName | Amount |
---------------|-------------|
Jupiter Jones | 1,100.12 |
Peter Crenshaw | 0.00 |
Bob Andrews | 231.02 |
---------------|-------------|
Sum | 1,331.14 |
Строки добавляются в таблицу с помощью
table.AddCell(cell1)
table.AddCell(cell2)
Этопример очень упрощен ... к сожалению, из-за структуры данных и вычислений, которые я должен сделать, я не знаю, должна ли быть напечатана линия позиции перед началом строки (первая ячейка строки) илине.
Так можно ли «запомнить» какой-то индекс или дескриптор или что-то еще, чтобы я мог удалить определенные объекты из документа itext7, прежде чем «отправить» его в средство визуализации?
Таблица должна выглядеть следующим образом после «удаления»:
CustomerName | Amount |
---------------|-------------|
Jupiter Jones | 1,100.12 |
Bob Andrews | 231.02 |
---------------|-------------|
Sum | 1,331.14 |
Надеюсь, вы понимаете, о чем я ...
Чтобы уточнить некоторые факты и ответить наОтветы на вопросы:
Я написал класс-обертку (dll) для itext7, чтобы создавать с ее помощью различные типы PDF-файлов.Целое создание таблицы содержит
obj.TableBegin({Cell1Width, Cell2Width})
while objMySqlDataReader.Read
Dim calculatedAmount as Single = 0
//do some calculations
objCell1.Text = objMySqlDataReader("CustomerName")
objCell2.Text = calculatedAmount
obj.TableCreateRow({objCell1, objCell2})
End While
obj.TableEnd()
Метод TableBegin
Private Sub TableBegin(ByVal ColWidths as Single())
table = new Table(ColWidths)
//some formattings and so on
End Sub
Метод TableCreateRow
Private Sub TableCreateRow(byval arrCells as MyOwnCellType())
For Each varCell As MyOwnCellType In arrCells
Dim c As Cell = New Cell()
Dim p As Paragraph = New Paragraph(varCell.Text)
c.Add(p)
//followed by some formatting lines like c.SetBackgroudColor
//or c.SetBorder
table.AddCell(c)
Next
End Sub
Метод TableEnd
Private Sub TableEnd()
document.Add(table)
End Sub
момент, когда я знаю, является ли строка, которая должна быть напечатана или нет, переменной.Иногда я знаю это только после «печати» обеих ячеек строки.Но может случиться так, что я хочу удалить строку таблицы после того, как таблица будет «закончена».
В другом «типе документа» есть очень похожая проблема, но там мне нужно удалить целуюстраница документа, включая абзацы, таблицы, изображения ....
Моя утопическая идея заключалась в том, что я "сохраняю" дескриптор каждого "объекта, который можно удалить" в списке или массиве и после распознаванияобъекты должны быть напечатаны или нет, я могу либо очистить этот массив, либо удалить все объекты в этом массиве чем-то вроде document.remove(handle)
Еще одна утопическая идея заключалась в том, что я "собираю" все "возможные для удаления /напечатанные объекты "в любом виде массива или списка, и после того, как я узнаю, могу ли я печатать или нет эти объекты в документе или отбрасывать их.
Трудно описать и даже гораздо сложнее понять, почемуЯ не знаю, "печатать или нет" до печати.Но поверьте мне - я не знаю раньше.; -)
Любая идея или помощь очень ценится.