2012-04-22 125 views
5

我想在itextsharp中製作一個圓形的矩形。下面是輸出我現在已經沒有四捨五入:如何四捨五入iTextSharp表格邊界的角落?

enter image description here

,這裏是我的代碼,處理該輸出:

pdftbl = new PdfPTable(3); 
pdftbl.WidthPercentage = 100; 
width = new float[3]; 
width[0] = 0.6F; 
width[1] = 0.2F; 
width[2] = 0.6F; 
pdftbl.SetWidths(width); 
pdfcel = new PdfPCell(new Phrase(Insuredaddress, docFont9)); 
pdfcel.BorderColor = Color.BLACK; 
pdftbl.AddCell(pdfcel); 
pdfcel = new PdfPCell(new Phrase("", docWhiteFont9)); 
pdfcel.Border = 0; 
pdftbl.AddCell(pdfcel); 
pdfcel = new PdfPCell(new Phrase(BkrAddrss, docFont9)); 
pdfcel.BorderColor = Color.BLACK; 
pdftbl.AddCell(pdfcel); 
objDocument.Add(pdftbl); 

我可以改變/添加到達到預期的效果?

回答

7

iText [Sharp]沒有開箱即用的功能。這是一種迂迴的做事方式,但首先必須實現接口IPdfPCellEvent,然後將事件處理程序附加到,您將每個單元添加到表中。首先一個簡單的實現:

public class RoundRectangle : IPdfPCellEvent { 
    public void CellLayout(
    PdfPCell cell, Rectangle rect, PdfContentByte[] canvas 
) 
    { 
    PdfContentByte cb = canvas[PdfPTable.LINECANVAS]; 
    cb.RoundRectangle(
     rect.Left, 
     rect.Bottom, 
     rect.Width, 
     rect.Height, 
     4 // change to adjust how "round" corner is displayed 
    ); 
    cb.SetLineWidth(1f); 
    cb.SetCMYKColorStrokeF(0f, 0f, 0f, 1f); 
    cb.Stroke(); 
    } 
} 

PdfContentByte documentation - 基本上所有上面的代碼確實是畫一個單元格邊框圓角像你想要的。

然後分配上面創建這樣的事件處理程序:

RoundRectangle rr = new RoundRectangle();  
using (Document document = new Document()) { 
    PdfWriter writer = PdfWriter.GetInstance(document, STREAM); 
    document.Open(); 
    PdfPTable table = new PdfPTable(1); 
    PdfPCell cell = new PdfPCell() { 
    CellEvent = rr, Border = PdfPCell.NO_BORDER, 
    Padding = 4, Phrase = new Phrase("test") 
    }; 
    table.AddCell(cell); 
    document.Add(table); 
} 
+2

由於@kuujinbo其工作非常感謝 – Neeraj 2012-04-22 21:42:45

+0

這不完全回答這個問題,因爲OP是要求表四捨五入不是細胞。 – Icet 2016-11-09 10:20:39