2

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

正如所见,我能够让点扩展的唯一方法是手动输入它们;但是,这显然行不通,因为每次运行此代码时第一列的宽度都会有所不同。有没有办法我可以做到这一点?谢谢。

4

2 回答 2

3

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

于 2013-07-31T11:29:52.807 回答
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 });
}
于 2013-07-30T19:33:38.790 回答