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