Last post May 24, 2010 08:21 AM by TATWORTH
Member
3 Points
13 Posts
Apr 27, 2010 04:48 AM|RubenAgudo|LINK
Hello, I have created a pdfPTable(3) but if I don't fill 3 cells per line, the row is not rendered.
For me that is the easiest way to create it because I need a page with 3 columns of the same size.
I put my code here.
#region "Inicializacion e instanciación de objetos pdf que solo requieren ser instanciados una vez"
MemoryStream m = new MemoryStream();
//documento con tamaño A4 y los margenes de la plantilla original
Document documento = new Document(PageSize.A4, 7, 6, 6, 10);
//tipo de la descarga
Response.ContentType = "application/pdf";
//instanciamos el objeto escritor, que se encargara de guardarlo en su destino
PdfWriter writer = PdfWriter.GetInstance(documento, m);
writer.CloseStream = false;
//abrimos el documento
documento.Open();
//le asignamos al documento unas propiedades
documento.AddAuthor("Servicio de cocina");
documento.AddCreationDate();
//creamos una pdfPtable y le definimos 3 columnas
PdfPTable tabla = new PdfPTable(3);
tabla.
//a la tabla le asignamos un 100% de anchura
tabla.WidthPercentage = 100;
//alineamos la tabla a la izquierda porque si
//no la tabla solo ocuparia el 80% del ancho
//total del documento, es decir, centrandolo.
tabla.HorizontalAlignment = Element.ALIGN_LEFT;
//debido a que varios namespaces tienen
//el objeto Image, hay que hacer la referencia
//completa.
//Tambien creamos una nueva instancia de
//imagen diciendole donde esta la imagen.
iTextSharp.text.Image logoOsakidetza = iTextSharp.text.Image.GetInstance("C:/Inetpub/wwwroot/GestionTickets/Images/Logo_Osakidetza_peque_email.jpg");
//escalamos la imagen al 30% porque si no es muy grande.
logoOsakidetza.ScalePercent(30);
//alineamos la imagen a la izquierda.
logoOsakidetza.Alignment = iTextSharp.text.Image.ALIGN_LEFT;
//esto sirve para convertir un codigo de barras en una imagen
PdfContentByte cb = writer.DirectContent;
#endregion
for (x = 0; x < filas; x++)
{
#region "Inicializacion e instanciacion de objetos pdf que requieren ser instanciados e inicializados una vez por registro"
//creamos una celda (creamos una para cada registro)
PdfPCell celda = new PdfPCell();
//creamos un codigo de barras
Barcode39 codigoBarras = new Barcode39();
//creamos una imagen en la que guardaremos el codigo de barras
iTextSharp.text.Image barcode;
//creamos trozos de texto,
//aunque chunk tenga un nombre gracioso
//significa "trozo", "pedazo", y ya los instanciaremos despues
Chunk pdfTipoTicket;
Chunk pdfSeccion;
Chunk pdfFechaTicket;
//recogemos el tipoTicket del registro
//actual e instanciamos pdfTipoTicket.
tipoTicket = ticketsTable.Rows[x]["tipoTicket"].ToString().ToUpper();
pdfTipoTicket = new Chunk("VALE " + tipoTicket, FontFactory.GetFont(FontFactory.HELVETICA, 14, Font.BOLD));
//recogemos la seccion del registro actual
//e instanciamos pdfSeccion
seccion = ticketsTable.Rows[x]["seccion"].ToString().ToUpper();
pdfSeccion = new Chunk("SERVICIO DE " + seccion, FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.ITALIC));
//recogemos la fecha del registro actual y la guardamos en 2 variables una datetime y la otra string
//e instanciamos pdfFechaTicket
fechaTicket = Convert.ToDateTime(ticketsTable.Rows[x]["fecha"]);
pdfFechaTicket = new Chunk("FECHA: " + fechaTicket.ToShortDateString() + "\n\n", FontFactory.GetFont(FontFactory.HELVETICA, 12));
//asignamos las propiedades necesarias a la celda
celda.FixedHeight = 165;
celda.Padding = 5;
celda.BorderWidth = 1.5f;
#region "Creación del codigo unívoco para el codigo de barras"
codSeccion = Convert.ToInt32(seccionesAdapter.ScalarQueryCodSeccion(seccion));
dia = fechaTicket.Day;
mes = fechaTicket.Month;
year = fechaTicket.Year;
numero = Convert.ToInt32(ticketsTable.Rows[x]["numero"]);
codigoUnivoco = codSeccion.ToString() + dia.ToString() + mes.ToString() + year.ToString() + tipoTicket + numero;
//propiedades del codigo de barras
codigoBarras.CodeType = Barcode128.CODABAR;
codigoBarras.Code = codigoUnivoco;
//conversion del objeto barcode al tipo image
barcode = codigoBarras.CreateImageWithBarcode(cb, null, null);
Chunk xa = new Chunk(x.ToString());
#region "inserción de los objetos en la celda y finalmente en la tabla
celda.AddElement(logoOsakidetza);
celda.AddElement(xa);
celda.AddElement(pdfTipoTicket);
celda.AddElement(pdfSeccion);
celda.AddElement(pdfFechaTicket);
celda.AddElement(barcode);
tabla.AddCell(celda);
}
documento.Add(tabla);
documento.Close();
Response.AppendHeader("Content-Disposition", "attachment;filename=plantilla_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year + ".pdf");
Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
m.Close();
if x is less than 3 in the resulting pdf is nothing rendered
thanks in advance
itextsharp PdfPTable
All-Star
44551 Points
13496 Posts
MVP
May 24, 2010 08:21 AM|TATWORTH|LINK
Questions about iTextSharp can also be asked at http://www.nabble.com/iTextSharp-f4188.html
Member
3 Points
13 Posts
iTextSharp PdfPtable issue
Apr 27, 2010 04:48 AM|RubenAgudo|LINK
Hello, I have created a pdfPTable(3) but if I don't fill 3 cells per line, the row is not rendered.
For me that is the easiest way to create it because I need a page with 3 columns of the same size.
I put my code here.
#region "Inicializacion e instanciación de objetos pdf que solo requieren ser instanciados una vez"
MemoryStream m = new MemoryStream();
//documento con tamaño A4 y los margenes de la plantilla original
Document documento = new Document(PageSize.A4, 7, 6, 6, 10);
//tipo de la descarga
Response.ContentType = "application/pdf";
//instanciamos el objeto escritor, que se encargara de guardarlo en su destino
PdfWriter writer = PdfWriter.GetInstance(documento, m);
writer.CloseStream = false;
//abrimos el documento
documento.Open();
//le asignamos al documento unas propiedades
documento.AddAuthor("Servicio de cocina");
documento.AddCreationDate();
//creamos una pdfPtable y le definimos 3 columnas
PdfPTable tabla = new PdfPTable(3);
tabla.
//a la tabla le asignamos un 100% de anchura
tabla.WidthPercentage = 100;
//alineamos la tabla a la izquierda porque si
//no la tabla solo ocuparia el 80% del ancho
//total del documento, es decir, centrandolo.
tabla.HorizontalAlignment = Element.ALIGN_LEFT;
//debido a que varios namespaces tienen
//el objeto Image, hay que hacer la referencia
//completa.
//Tambien creamos una nueva instancia de
//imagen diciendole donde esta la imagen.
iTextSharp.text.Image logoOsakidetza = iTextSharp.text.Image.GetInstance("C:/Inetpub/wwwroot/GestionTickets/Images/Logo_Osakidetza_peque_email.jpg");
//escalamos la imagen al 30% porque si no es muy grande.
logoOsakidetza.ScalePercent(30);
//alineamos la imagen a la izquierda.
logoOsakidetza.Alignment = iTextSharp.text.Image.ALIGN_LEFT;
//esto sirve para convertir un codigo de barras en una imagen
PdfContentByte cb = writer.DirectContent;
#endregion
for (x = 0; x < filas; x++)
{
#region "Inicializacion e instanciacion de objetos pdf que requieren ser instanciados e inicializados una vez por registro"
//creamos una celda (creamos una para cada registro)
PdfPCell celda = new PdfPCell();
//creamos un codigo de barras
Barcode39 codigoBarras = new Barcode39();
//creamos una imagen en la que guardaremos el codigo de barras
iTextSharp.text.Image barcode;
//creamos trozos de texto,
//aunque chunk tenga un nombre gracioso
//significa "trozo", "pedazo", y ya los instanciaremos despues
Chunk pdfTipoTicket;
Chunk pdfSeccion;
Chunk pdfFechaTicket;
//recogemos el tipoTicket del registro
//actual e instanciamos pdfTipoTicket.
tipoTicket = ticketsTable.Rows[x]["tipoTicket"].ToString().ToUpper();
pdfTipoTicket = new Chunk("VALE " + tipoTicket, FontFactory.GetFont(FontFactory.HELVETICA, 14, Font.BOLD));
//recogemos la seccion del registro actual
//e instanciamos pdfSeccion
seccion = ticketsTable.Rows[x]["seccion"].ToString().ToUpper();
pdfSeccion = new Chunk("SERVICIO DE " + seccion, FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.ITALIC));
//recogemos la fecha del registro actual y la guardamos en 2 variables una datetime y la otra string
//e instanciamos pdfFechaTicket
fechaTicket = Convert.ToDateTime(ticketsTable.Rows[x]["fecha"]);
pdfFechaTicket = new Chunk("FECHA: " + fechaTicket.ToShortDateString() + "\n\n", FontFactory.GetFont(FontFactory.HELVETICA, 12));
#endregion
//asignamos las propiedades necesarias a la celda
celda.FixedHeight = 165;
celda.Padding = 5;
celda.BorderWidth = 1.5f;
#region "Creación del codigo unívoco para el codigo de barras"
codSeccion = Convert.ToInt32(seccionesAdapter.ScalarQueryCodSeccion(seccion));
dia = fechaTicket.Day;
mes = fechaTicket.Month;
year = fechaTicket.Year;
numero = Convert.ToInt32(ticketsTable.Rows[x]["numero"]);
codigoUnivoco = codSeccion.ToString() + dia.ToString() + mes.ToString() + year.ToString() + tipoTicket + numero;
#endregion
//propiedades del codigo de barras
codigoBarras.CodeType = Barcode128.CODABAR;
codigoBarras.Code = codigoUnivoco;
//conversion del objeto barcode al tipo image
barcode = codigoBarras.CreateImageWithBarcode(cb, null, null);
Chunk xa = new Chunk(x.ToString());
#region "inserción de los objetos en la celda y finalmente en la tabla
celda.AddElement(logoOsakidetza);
celda.AddElement(xa);
celda.AddElement(pdfTipoTicket);
celda.AddElement(pdfSeccion);
celda.AddElement(pdfFechaTicket);
celda.AddElement(barcode);
tabla.AddCell(celda);
#endregion
}
documento.Add(tabla);
documento.Close();
Response.AppendHeader("Content-Disposition", "attachment;filename=plantilla_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year + ".pdf");
Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
m.Close();
if x is less than 3 in the resulting pdf is nothing rendered
thanks in advance
itextsharp PdfPTable
All-Star
44551 Points
13496 Posts
MVP
Re: iTextSharp PdfPtable issue
May 24, 2010 08:21 AM|TATWORTH|LINK
Questions about iTextSharp can also be asked at http://www.nabble.com/iTextSharp-f4188.html
This earns you a point and marks your thread as Resolved so we will all know you have been helped.
FAQ on the correct forum http://forums.asp.net/p/1337412/2699239.aspx#2699239