Удалите объекты, такие как строка таблицы, перед рендерингом. - PullRequest
0 голосов
/ 28 мая 2019

Я создаю документ с 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)

Еще одна утопическая идея заключалась в том, что я "собираю" все "возможные для удаления /напечатанные объекты "в любом виде массива или списка, и после того, как я узнаю, могу ли я печатать или нет эти объекты в документе или отбрасывать их.

Трудно описать и даже гораздо сложнее понять, почемуЯ не знаю, "печатать или нет" до печати.Но поверьте мне - я не знаю раньше.; -)

Любая идея или помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...