2012-04-22 15 views
5

Voglio fare un rettangolo rotondo in itextsharp. Ecco l'output che ho ora senza arrotondamento:Come arrotondare gli angoli di un bordo della tabella iTextSharp?

enter image description here

ed ecco il mio codice che elabora quella uscita:

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

Cosa posso cambiare/aggiungere per ottenere il risultato desiderato?

risposta

7

iText [Sharp] non ha questa funzionalità fuori dalla scatola. È un modo indiretto di fare le cose, ma prima devi implementare l'interfaccia IPdfPCellEvent e in secondo luogo collegare il gestore di eventi a ogni cella aggiunta alla tabella. In primo luogo una semplice implementazione:

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

Vedere il PdfContentByte documentation - praticamente tutto il codice di cui sopra non è disegnare un bordo della cella con angoli arrotondati, come si desidera.

quindi assegnare il gestore di eventi creato in precedenza in questo modo:

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

Grazie @kuujinbo sue grazie che lavorano un sacco – Neeraj

+0

Non è esattamente risposta a questa domanda, perché PO sta chiedendo tavolo arrotondamento non cella. – Icet

Problemi correlati