渲染前删除表格行之类的对象

时间:2019-05-28 14:45:55

标签: vb.net itext itext7

我正在vb.net中使用itext7生成文档。该文档是付款提醒。该文档包含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 |

我希望你明白我的意思...

要弄清事实并回答问题:

我为itext7写了一个包装类(dll),用它来创建不同类型的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

方法表结束

Private Sub TableEnd()
    document.Add(table)
End Sub  

我知道要打印的行是否可变的时刻。有时我只是在“打印”该行的两个单元格后才知道。但是有可能发生了,我想在表“完成”后删除表行。

在另一个“文档类型”中,有一个非常相似的问题,但是我需要删除文档的整个页面,包括段落,表格,图像...。

我的乌托邦思想是,我“保存”列表或数组中每个“可能要删除的对象”的句柄,并且在识别出必须打印对象之后,我可以清除此数组或删除所有对象该数组中的对象,例如document.remove(handle)

另一个乌托邦式的想法是,我以任何类型的数组或列表“收集”所有“可能要删除/打印的对象”,并且在识别出是否可以将这些对象“推送”到文档或丢弃它们之后

很难描述,甚至更难以理解为什么在打印之前我不知道“是否打印”。但请相信我-我不早知道。 ;-)

任何想法或帮助都非常感谢。

0 个答案:

没有答案