È possibile avere una spaziatura tra celle all'interno di una tabella (PdfPTable) in iTextSharp? Non riesco a vedere da nessuna parte che sia possibile. Ho visto invece un suggerimento di utilizzare iTextSharp.text.Table ma non sembra disponibile sulla mia versione di iTextSharp (5.2.1).Possibile spaziatura della tabella della tabella iTextSharp?
risposta
La classe Tabella è stata rimossa da iText a partire da 5.x, in favore di PdfPTable.
Per quanto riguarda la spaziatura, quello che stai cercando sono i metodi setPadding.
Dai un'occhiata alla API di iText per ulteriori informazioni:
http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html
(E 'per la versione di Java, ma la porta C# mantiene i nomi dei metodi)
Se siete alla ricerca per una vera spaziatura delle celle come HTML allora no, lo PdfPTable
non supporta questo in modo nativo. Tuttavia, lo PdfPCell
supporta una proprietà che accetta un'implementazione personalizzata di IPdfPCellEvent
che verrà richiamata ogni volta che si verifica un layout di cella. Di seguito è una semplice implementazione di uno, probabilmente si vorrà modificarlo in base alle proprie esigenze.
public class CellSpacingEvent : IPdfPCellEvent {
private int cellSpacing;
public CellSpacingEvent(int cellSpacing) {
this.cellSpacing = cellSpacing;
}
void IPdfPCellEvent.CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
//Grab the line canvas for drawing lines on
PdfContentByte cb = canvases[PdfPTable.LINECANVAS];
//Create a new rectangle using our previously supplied spacing
cb.Rectangle(
position.Left + this.cellSpacing,
position.Bottom + this.cellSpacing,
(position.Right - this.cellSpacing) - (position.Left + this.cellSpacing),
(position.Top - this.cellSpacing) - (position.Bottom + this.cellSpacing)
);
//Set a color
cb.SetColorStroke(BaseColor.RED);
//Draw the rectangle
cb.Stroke();
}
}
usarlo:
//Create a two column table
PdfPTable table = new PdfPTable(2);
//Don't let the system draw the border, we'll do that
table.DefaultCell.Border = 0;
//Bind our custom event to the default cell
table.DefaultCell.CellEvent = new CellSpacingEvent(2);
//We're not changing actual layout so we're going to cheat and padd the cells a little
table.DefaultCell.Padding = 4;
//Add some cells
table.AddCell("Test");
table.AddCell("Test");
table.AddCell("Test");
table.AddCell("Test");
doc.Add(table);
provarlo
PdfPTable table = new PdfPTable(2);
table.getDefaultCell().setBorder(0);
table.getDefaultCell().setPadding(8);
table.addCell("Employee ID");
table.addCell("");
table.addCell("Employee Name");
table.addCell("");
table.addCell("Department");
table.addCell("");
table.addCell("Place");
table.addCell("");
table.addCell("Contact Number");
table.addCell("");
document.add(table);
Grazie per questo, ma che è per l'aggiunta di imbottitura delle cellule (all'interno della cellula). Ciò di cui ho bisogno è la spaziatura delle celle (tra le celle). –