2012-04-22 80 views
5

Quiero hacer un rectángulo redondo en itextsharp. Aquí está la salida que tengo ahora sin redondeo:¿Cómo doblo las esquinas de un borde de tabla iTextSharp?

enter image description here

y aquí está mi código que procesa esa salida:

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

¿Qué puedo cambiar/I Añadir a lograr el resultado deseado?

Respuesta

7

iText [Sharp] no tiene esta funcionalidad lista para usar. Es una forma indirecta de hacer las cosas, pero primero debe implementar la interfaz IPdfPCellEvent y, segundo, adjuntar el controlador de eventos al cada celda que agregue a la tabla. En primer lugar una implementación simple:

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

Véase el PdfContentByte documentation - básicamente todo el código anterior es dibujar un borde de la celda con esquinas redondas como usted desee.

a continuación, asignar el controlador de eventos creada por encima de la siguiente manera:

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

Gracias @kuujinbo su agradecimiento trabajan mucho – Neeraj

+0

No es exactamente responder a esta pregunta porque OP está pidiendo mesa de redondeo no teléfonos. – Icet

Cuestiones relacionadas