用点填充PDFP表格单元格

时间:2013-07-30 15:28:24

标签: c# itextsharp

我有一张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);

可以看出,我能够获得点扩展的唯一方法是手动输入它们;但是,这显然不起作用,因为每次运行此代码时第一列的宽度都会不同。有没有办法可以做到这一点?感谢。

2 个答案:

答案 0 :(得分:2)

请下载chapter 2 of my book并搜索DottedLineSeparator。此分隔符类将在Paragraph的两个部分之间绘制一条虚线(如本书中的图所示)。您可以找到Java书籍样本{C <3}}的C#版本。

答案 1 :(得分:0)

如果您可以使用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 });
}