用点填充PDFP表格单元格

本文关键字:表格 单元格 PDFP 填充 | 更新日期: 2023-09-27 18:25:35

我有一个PDFP表,我想把它这样布局:

Item1 ............  $10.00
Item1123123 ......  $50.00
Item3 ............  $75.00

这就是我目前所拥有的:

var tableFont = FontFactory.GetFont(FontFactory.HELVETICA, 7);
var items = from p in ctx.quote_server_totals
            where p.item_id == id
               && p.name != "total"
               && p.type != "totals"
            select p;
foreach (var innerItem in items)
{               
    detailsTable.AddCell(new Phrase(innerItem.type == "discount" ? "ADJUSTMENT -" + innerItem.name : innerItem.name, tableFont));
    detailsTable.AddCell(new Phrase(".......................................................", tableFont));
    detailsTable.AddCell(new Phrase(Convert.ToDecimal(innerItem.value).ToString("c"), tableFont));
}
document.Add(detailsTable);

正如你所看到的,我能够让这些点扩展的唯一方法是手动输入它们;然而,这显然不起作用,因为每次运行此代码时,第一列的宽度都会不同。我有办法做到这一点吗?谢谢

用点填充PDFP表格单元格

请下载我的书的第2章并搜索DottedLineSeparator。这个分隔符类将在Paragraph的两个部分之间绘制一条虚线(如本书中的图所示)。您可以在这里找到Java书籍的C#版本示例。

如果你能使用固定宽度的字体,比如FontFactory.COURIER,你的任务会容易得多。

//Our main font
var tableFont = FontFactory.GetFont(FontFactory.COURIER, 20);
//Will hold the shortname from the database
string itemShortName;
//Will hold the long name which includes the periods
string itemNameFull;
//Maximum number of characters that will fit into the cell
int maxLineLength = 23;
//Our table
var t = new PdfPTable(new float[] { 75, 25 });
for (var i = 1; i < 10000; i+=100) {
    //Get our item name from "the database"
    itemShortName = "Item " + i.ToString();
    //Add dots based on the length
    itemNameFull = itemShortName + ' ' + new String('.', maxLineLength - itemShortName.Length + 1);
    //Add the two cells
    t.AddCell(new PdfPCell(new Phrase(itemNameFull, tableFont)) { Border = PdfPCell.NO_BORDER });
    t.AddCell(new PdfPCell(new Phrase(25.ToString("c"), tableFont)) { Border = PdfPCell.NO_BORDER });
}