jueves, 6 de marzo de 2014

Posted by Unknown On 9:50
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:



6 comentarios:

  1. como hacer para que el contenido de la pagina no pise el pie de pagina?

    ResponderEliminar
  2. Tengo este fragmento de código:

    Public 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?

    ResponderEliminar
    Respuestas
    1. Perdón es así:

      Public 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

      Eliminar
  3. Buenas Tardes.

    Tengo 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.

    ResponderEliminar