Para que tu documento en PDF repita encabezados (con imagen) y pies de página te comparto el siguiente código:
Public Class CClassPDFPage Inherits PdfPageEventHelper Public Overrides Sub OnStartPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document) Dim oImagen As iTextSharp.text.Image Dim cbPie As PdfContentByte Dim cbEncabezado As PdfContentByte '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL ENCABEZADO '----------------------------------------------------------------------------------------- cbEncabezado = writer.DirectContent With cbEncabezado .BeginText() .SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA_BOLD, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 8) .SetColorFill(iTextSharp.text.BaseColor.BLACK) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 760, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 750, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 740, 0) .EndText() End With '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL PIE DE PAGINA '----------------------------------------------------------------------------------------- cbPie = writer.DirectContent cbPie.BeginText() cbPie.SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 10) cbPie.SetColorFill(iTextSharp.text.BaseColor.BLACK) cbPie.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Página: " & writer.PageNumber, 540, 25, 0) cbPie.EndText() '----------------------------------------------------------------------------------------- ' LOGOS DEL DOCUMENTO '----------------------------------------------------------------------------------------- oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(28, 737) oImagen.ScalePercent(20) 'Ajuste porcentual de la imagen document.Add(oImagen) 'Se agrega la imagen al documento oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(480, 737) oImagen.ScalePercent(16) document.Add(oImagen) End Sub End Class
Explicación del código:
- Hay que tener en mente que se crea una clase que deriva de un evento, el cual produce la creación o presentación de una nueva página. Este evento es onStartPage
- Se crean los objetos que se incorporarán al documento: Image, PdfContentByte
- Se define el encabezado del documento, este encabezado es sólo texto, por lo que se inicia con la función BeginText(), hay otra función que permite iniciar una capa que es BeginLayer().
- Se define la fuente de ese texto, el color, su alineación y su ubicación.
- El punto 0,0 se ubica a la izquierda y al inferior del documento. En este ejemplo, el valor 740 es el punto más alto del documento.
- Se concluye con la introducción del texto a través de EndText().
- Para el caso del pie de página, se realiza la misma temática.
- Las propiedades de la imagen son:
- Image.GetInstance, que es la ruta
- SetAbsolutePosition, se define la ubicación de la imagen
- ScalePercent, es la escala de la imagen (este valor es porcentual)
Producto terminado:
como hacer para que el contenido de la pagina no pise el pie de pagina?
ResponderEliminarcambia el valor del margen inferior
EliminarHola aún esta activo este blog?
ResponderEliminarTengo este fragmento de código:
ResponderEliminarPublic Sub PDFGen(ByVal codigo As String, ByVal nombre As String, ByVal fojas As Integer)
Dim Ruta As String
Ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Ruta &= "\" & nombre & ".pdf"
Using stream As FileStream = New FileStream(Ruta, FileMode.Create)
Dim pdfDoc As Document = New Document(PageSize.A4, 20, 20, 20, 20)
Dim writer As PdfWriter = PdfWriter.GetInstance(pdfDoc, stream)
pdfDoc.Open()
Dim sr As StringReader = New StringReader(codigo)
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr)
pdfDoc.Close()
stream.Close()
End Using
End Sub
Pero solo me coloca la imagen al final, lógicamente, como puedo recorrer el PDF y poner la imagen en todas las hojas?
Perdón es así:
EliminarPublic Sub PDFGen(ByVal codigo As String, ByVal nombre As String, ByVal fojas As Integer)
Dim Ruta As String
Ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Ruta &= "\" & nombre & ".pdf"
Using stream As FileStream = New FileStream(Ruta, FileMode.Create)
Dim pdfDoc As Document = New Document(PageSize.A4, 20, 20, 20, 20)
Dim writer As PdfWriter = PdfWriter.GetInstance(pdfDoc, stream)
pdfDoc.Open()
Dim sr As StringReader = New StringReader(codigo)
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr)
Dim objImagePdf As Image
objImagePdf = Image.GetInstance("Wall.jpg")
objImagePdf.ScaleToFit(3150, 850)
objImagePdf.Alignment = iTextSharp.text.Image.UNDERLYING
objImagePdf.SetAbsolutePosition(0, 0)
pdfDoc.Add(objImagePdf)
pdfDoc.Close()
stream.Close()
End Using
End Sub
Buenas Tardes.
ResponderEliminarTengo un inconveniente con el nuero de pagina, y es que en la ultima pagina no muestra dicho numero de pagina. es decir tengo un pdf con 3 hojas y solo muestra el numero de pagina en las 2 primeras. Gracias de antemano por su ayuda.