2013-07-30 255 views
1

我有一個PDFP表,我想把它奠定了像這樣:填充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

選取一個總寬度(項目名稱+ $ xx.xx +填充)。減去項目名稱和填充以及總數。打印許多點。 –

回答

2

請下載chapter 2 of my book並搜索DottedLineSeparator。此分隔符類將在Paragraph的兩個部分之間繪製虛線(如本書中的圖所示)。您可以找到Java書樣本here的C#版本。

+0

啊;先生,你是個紳士和學者......我把你的帽子給我。願你的日子充滿溫暖和無盡的賞賜! –

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 }); 
}