web-dev-qa-db-fra.com

Masquer la bordure de la table dans iTextSharp

Comment puis-je masquer la bordure du tableau à l'aide de iTextSharp. J'utilise le code suivant pour générer un fichier:

var document = new Document(PageSize.A4, 50, 50, 25, 25);

// Create a new PdfWriter object, specifying the output stream
var output = new MemoryStream();
var writer = PdfWriter.GetInstance(document, output);

document.Open();
PdfPTable table = new PdfPTable(3);
var bodyFont = FontFactory.GetFont("Arial", 10, Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
Font arial = FontFactory.GetFont("Arial", 6, BaseColor.BLUE);
cell = new PdfPCell(new Phrase("Font test is here ", arial));
cell.PaddingLeft = 5f;
cell.Colspan = 1;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("XYX"));
cell.Colspan = 2;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("Hello World"));
cell.PaddingLeft = 5f;
cell.Colspan = 1;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("XYX"));
cell.Colspan = 2;
table.AddCell(cell);



table.SpacingBefore = 5f;
document.Add(table);
document.Close();

Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=Receipt-test.pdf");
Response.BinaryWrite(output.ToArray());

Dois-je ne spécifier aucune bordure pour des cellules individuelles ou je peux ne spécifier aucune bordure pour le tableau lui-même.

Je vous remercie

32
SharpCoder

Bien que j'ai voté pour la réponse de Martijn, je souhaite ajouter une clarification.

Seules les cellules ont des frontières dans iText; les tables n'ont pas de bordure. La suggestion de Martijn de définir la bordure de la cellule par défaut sur NO_BORDER est correcte:

table.DefaultCell.Border = Rectangle.NO_BORDER;

Mais cela ne fonctionnera pas pour l'extrait de code fourni dans la question. Les propriétés de la cellule par défaut ne sont utilisées que si iText doit créer implicitement une instance PdfPCell (par exemple, si vous utilisez la méthode addCell() en passant un paramètre Phrase en paramètre).

Dans l'extrait de code fourni par @Brown_Dynamite, les objets PdfPCell sont créés explicitement. Cela signifie que vous devez définir la bordure de chacune de ces cellules sur NO_BORDER.

D'habitude, j'écris une classe d'usine pour créer des cellules. De cette façon, je peux réduire considérablement la quantité de code dans la classe qui crée la table.

64
Bruno Lowagie

Cela devrait faire l'affaire:

table.DefaultCell.Border = Rectangle.NO_BORDER; 

ou

table.borderwidth= 0;
9
Martijn van Put

Premièrement, nous pouvons définir toutes les bordures de cellules sur 0. Après avoir affecté toutes les cellules à un tableau, nous pouvons utiliser le code suivant pour uniquement la bordure externe pdfptable.

        PdfPCell cell = new PdfPCell();
        cell.AddElement(t);
        cell.BorderWidthBottom=1f;
        cell.BorderWidthLeft=1f;
        cell.BorderWidthTop=1f;
        cell.BorderWidthRight = 1f;
        PdfPTable t1 = new PdfPTable(1);
        t1.AddCell(cell);

Ici, nous pouvons ajouter un tableau à une cellule et définir une bordure, puis à nouveau ajouter cette cellule à un autre tableau et l'utiliser selon nos besoins.

8
Jom George

Si votre PdfPTable est imbriqué dans un autre PdfPTable, le tableau imbriqué affichera les bordures du tableau. Le seul moyen de supprimer les bordures du tableau consiste à placer le PdfPTable imbriqué dans une PdfPCell du PdfPTable principal et à définir la largeur de la bordure de cette cellule sur 0.

iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(1); //<-- Main table
table.TotalWidth = 540f;
table.LockedWidth = true;
float[] widths = new float[] { 540f };
table.SetWidths(widths);
table.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.SpacingAfter = 10;

PdfPTable bodyTable = new PdfPTable(1); //<--Nested Table
bodyTable.TotalWidth = 540f;
bodyTable.LockedWidth = true;
float[] bodyWidths = new float[] { 540f };
bodyTable.SetWidths(bodyWidths);
bodyTable.HorizontalAlignment = 0;
bodyTable.SpacingAfter = 10;
bodyTable.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER;

var para1 = new Paragraph("This is a long paragraph", blackNormal);
para1.SetLeading(3f, 1f);
PdfPCell bodyCell1 = new PdfPCell();
bodyCell1.AddElement(para1);
bodyCell1.Border = 0;
bodyTable.AddCell(bodyCell1);

iTextSharp.text.pdf.PdfPCell cellBody = new iTextSharp.text.pdf.PdfPCell(bodyTable);
cellBody.BorderWidth = 0; //<--- This is what sets the border for the nested table
table.AddCell(cellBody);

Il m'a fallu beaucoup de temps pour comprendre cela. Ça marche pour moi maintenant.

2
David Lee
PdfPTable table = new PdfPTable(4);
table.TotalWidth = 400f;
table.LockedWidth = true;
PdfPCell header = new PdfPCell(new Phrase("Header"));
header.Colspan = 4;
table.AddCell(header);
table.AddCell("Cell 1");
table.AddCell("Cell 2");
table.AddCell("Cell 3");
table.AddCell("Cell 4");
PdfPTable nested = new PdfPTable(1);
nested.AddCell("Nested Row 1");
nested.AddCell("Nested Row 2");
nested.AddCell("Nested Row 3");
PdfPCell nesthousing = new PdfPCell(nested);
nesthousing.Padding = 0f;
table.AddCell(nesthousing);
PdfPCell bottom = new PdfPCell(new Phrase("bottom"));
bottom.Colspan = 3;
table.AddCell(bottom);
doc.Add(table);

PdfPTable table = new PdfPTable(3);
table.TotalWidth = 144f;
table.LockedWidth = true;
table.HorizontalAlignment = 0;
PdfPCell left = new PdfPCell(new Paragraph("Rotated"));
left.Rotation = 90;
table.AddCell(left);
PdfPCell middle = new PdfPCell(new Paragraph("Rotated"));
middle.Rotation = -90;
table.AddCell(middle);
table.AddCell("Not Rotated");
doc.Add(table);

Vérifiez ce lien pls

2
Mehmet Taha Meral

essayez ce code 

 yourtable.DefaultCell.Border = 0;
0
farhan farhan