我正在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)
另一个乌托邦式的想法是,我以任何类型的数组或列表“收集”所有“可能要删除/打印的对象”,并且在识别出是否可以将这些对象“推送”到文档或丢弃它们之后
很难描述,甚至更难以理解为什么在打印之前我不知道“是否打印”。但请相信我-我不早知道。 ;-)
任何想法或帮助都非常感谢。