Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/12/2011, 18:52
Avatar de drako_darpan
drako_darpan
 
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Problema con encabezados usando iTextSharp y C#

Hola que tal, bueno actualmente estoy exportando un DataGridView de C# a PDF.

La exportada no tengo problemas ya la logre hacer, pero mi problema consiste con el encabezado. Investigando en google encontre que con la version del iTextSharp superior a la 5 se elimino el HeaderFooter y ahora se utiliza el PageEvent, en el cual se manda llamar a OnStarPage (Donde se pone la información que va en el encabezado ) OnEndPage ( Donde tenia entendido, va la información que va en el pie de pagina ). En el OnStarPage me funciona bien siempre y cuando ponga texto utilizando el Paragraph, pero si al documento le anexo un PdfPTable datatable, no me respeta el encabezado en la ultima hoja que contenga información, poniendome el encabezado en las ultimas lineas .

Este es mi codigo:
public class EventoTitulos : PdfPageEventHelper
{
public override void OnStartPage(PdfWriter writer, Document document)
{
string sTitulo = "TITULO";
document.Add(new Paragraph(sTitulo, font));
}

public override void OnEndPage(PdfWriter writer, Document document)
{
string sPiePagina = "PIE DE PAGINA";
document.Add(new Paragraph(sPiePagina.Trim(), font));
}
}
public static void Pdf(DataGridView Grid)
{
FileStream file = new FileStream(sAgotadoNorte, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
Document doc = new Document(PageSize.LEGAL.Rotate(), 10, 10, 10, 10);
PdfWriter pdfWriter = PdfWriter.GetInstance(doc, file);
EventoTitulos ev = new EventoTitulos();
pdfWriter.PageEvent = ev;

doc.Open();

GenerarDocumento(doc, Grid);

doc.Close();
}
//Función que genera el documento Pdf
public static void GenerarDocumento(Document document, DataGridView Grid)
{
string sTexto = "";
//se crea un objeto PdfTable con el numero de columnas del dataGridView
PdfPTable datatable = new PdfPTable(Grid.ColumnCount);

//asignamos algunas propiedades para el diseño del pdf
datatable.DefaultCell.Padding = Grid.ColumnCount;

float[] headerwidths = GetTamañoColumnas(Grid);
datatable.SetWidths(headerwidths);
datatable.WidthPercentage = 100;
datatable.DefaultCell.BorderWidth = 2;

datatable.HeaderRows = 0;
datatable.DefaultCell.BorderWidth = 1;

//SE GENERA EL CUERPO DEL PDF

for (int i = 0; i <= Grid.RowCount - 1; i++)
{
for (int j = 0; j < Grid.ColumnCount; j++)
{
sTexto = Grid[j, i].Value.ToString();
PdfPCell cell = new PdfPCell(new Phrase(sTexto,font));
cell.Border = 0;
cell.HorizontalAlignment = 0;
datatable.AddCell(cell);
}
datatable.CompleteRow();
}
//SE AGREGARA LA PDFPTABLE AL DOCUMENTO
document.Add(datatable);
}
Actualmente estoy trabajando con la version 5.1.2.0, si alguien sabe a que le puedo mover para que me salga el encabezado bien en todas las hojas, le estaria muy agradecido y también con respecto al Pie de Pagina para que lo ponga al final de la hoja no despues del encabezado, por mientras seguire buscando haber que puedo encontrar