Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con encabezados usando iTextSharp y C#

Estas en el tema de Problema con encabezados usando iTextSharp y C# en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/12/2011, 18:52
Avatar de 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
  #2 (permalink)  
Antiguo 01/12/2011, 20:04
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema con encabezados usando iTextSharp y C#

Hola de nuevo, no fue nada facil pero por fin puede hacer lo del encabezado y pie de pagina. Pero no dire la respuesta .

Una pequeña broma . El modo para que les quede el encabezado y el pie de pagina es anexando lo siguiente:
public class EventoTitulos : PdfPageEventHelper
{
protected PdfTemplate total;
protected BaseFont helv;
private bool settingFont = false;
public override void OnOpenDocument(PdfWriter writer, Document document)
{// Se crea el template
total = writer.DirectContent.CreateTemplate(100, 100);
total.BoundingBox = new Rectangle(-20, -20, 100, 100);
helv = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
}
public override void OnStartPage(PdfWriter writer, Document document)
{
string sTitulo = "", sLinea = "";
float textSize = 6;
float textBase = 600; // Este pone la informacion en la parte superior

PdfContentByte cb = writer.DirectContent;
cb.SaveState();
cb.BeginText();
cb.SetFontAndSize(helv, 6);

sTitulo = "TITULO";
cb.SetTextMatrix(document.Left, textBase);
cb.ShowText(sTitulo);
cb.AddTemplate(total, document.Left + textSize, textBase);
textBase = textBase - 5;

sLinea = "------------------------------------";
cb.SetTextMatrix(document.Left, textBase - 5);
cb.ShowText(sLinea);
cb.EndText(); //Este es necesario para cerrar el BeginText, pero solo se pone en el ultimo texto a anexar, sino marcara error
cb.AddTemplate(total, document.Left + textSize, textBase);

cb.RestoreState();
}
public override void OnEndPage(PdfWriter writer, Document document)
{
PdfContentByte cb = writer.DirectContent;
cb.SaveState();
cb.BeginText();
cb.SetFontAndSize(helv, 6);
string sPiePagina = "";

float textSize = 6;
float textBase = 15; // Este lo pone la informacion en la parte inferior

sPiePagina = "PIE DE PAGINA 1";
cb.SetTextMatrix(document.Left, textBase);
cb.ShowText(sPiePagina);
cb.AddTemplate(total, document.Left + textSize, textBase);

sPiePagina = "PIE DE PAGINA 2";
cb.SetTextMatrix(document.Left, textBase - 5);
cb.ShowText(sPiePagina);
cb.EndText();
cb.AddTemplate(total, document.Left + textSize, textBase);

cb.RestoreState();
}
}
Ya con esto solo ocupan anexar EventoTitulos ev = new EventoTitulos(); pdfWriter.PageEvent = ev; y con eso ya queda el encabezado y el pie de pagina listo.

Etiquetas: datagridview, encabezados, itextsharp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:58.