Antes que nada debemos descargar la librería PdfSharp, la pueden encontrar en sourceforge, además debe registrarla en el proyecto.
Nota:
Esta librería viene en un archivo comprimido, el cual trae la librería, además de los ejemplos, por lo tanto no queda registrada en el GAC, así que hay que registrarla manualmente.
Esta librería viene en un archivo comprimido, el cual trae la librería, además de los ejemplos, por lo tanto no queda registrada en el GAC, así que hay que registrarla manualmente.
Para este ejercicio crearemos un proyecto, y en formulario creamos 4 TextBox así:
Los nombres de los TextBox son:
txTitulo
txMarca
txTexto
txImagen
Pero como creo que es mejor la acción a las palabras (por no decir que soy malo para hablar o escribir), entonces vamos a lo que vinimos.
El código:
A continuación sigue código en Visual Basic. el formulario de muestra
Imports System.IO Imports PdfSharp Imports PdfSharp.Pdf Imports PdfSharp.Pdf.IO Imports PdfSharp.Drawing Imports PdfSharp.Drawing.Layout Public Partial Class MainForm Public Sub New() ' The Me.InitializeComponent call is required for Windows Forms designer support. Me.InitializeComponent() ' ' TODO : Add constructor code after InitializeComponents ' End Sub Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs) txImagen.Text = application.StartupPath & "\imagen.jpg" End Sub Sub BtGenerarClick(ByVal sender As Object, ByVal e As EventArgs) If String.IsNullOrEmpty(txTitulo.Text) Then messagebox.Show("Digite un titulo para el archivo") Return End If If String.IsNullOrEmpty(txMarca.Text) Then messagebox.Show("Digite un texto para la marca de agua") Return End If If String.IsNullOrEmpty(txTexto.Text) Then messagebox.Show("digite un texto cualquiera") Return End if If String.IsNullOrEmpty(tximagen.Text) Then messagebox.Show("digite o seleccione un archivo de imagen") Return End If Dim Documento As PdfDocument = New PdfDocument ' Crea el documento Pdf Dim pagina As PdfPage = Documento.AddPage ' Crea una pagina vacia Dim FteNormal As XFont = New XFont("Arial", 10, XFontStyle.Regular) ' Crea la fuente Dim FteNegrilla as XFont = New XFont("Arial", 15, XFontStyle.Bold) ' Crea la fuente pagina.Size = PageSize.Letter pagina.Orientation = PageOrientation.Portrait Dim pgfx As XGraphics = XGraphics.FromPdfPage(pagina) ' Crea un Objeto XGraphics Dim tf As XTextFormatter ' Objeto para formatear texto Dim Archivo As String = Application.StartupPath & "Prueba.pdf" 'Escribimos el titulo Dim rect As New XRect(15,15,585,20) pgfx.DrawString(txTitulo.Text,FteNegrilla,xBrushes.Black,rect,XStringFormat.Center) 'escribimos el texto tf = New XTextFormatter(pgfx) tf.Alignment = XParagraphAlignment.Justify rect = New XRect(15,45,585,60) tf.DrawString(txTexto.Text,FteNormal,Xbrushes.Black,rect) 'Escribimos el "Hola Mundo" pgfx.DrawString("Hola Mundo! ....",FteNormal,XBrushes.Black,150,150) 'Insertamos un cuadro rect = New XRect(50,200,100,50) Dim pen As XPen = New XPen(XColor.FromArgb(0,0,0)) Dim elipse As XSize elipse.Height = 10 elipse.Width = 10 pgfx.DrawRoundedRectangle(pen,rect,elipse) 'Insertamos un cuadro con color interno rect = New XRect(200,200,100,50) pgfx.DrawRoundedRectangle(pen, Xbrushes.Aqua ,rect,elipse) 'Insertamos la imagen en una hoja nueva If File.Exists(txImagen.Text) Then pagina = Documento.AddPage pagina.Size = pagesize.Letter pgfx = XGraphics.FromPdfPage(pagina) Dim imagen As XImage = XImage.FromFile(txImagen.Text) pgfx.DrawImage(imagen, 50, 150, 500, 375) End If Try 'si el archivo esta abierto da error 'para que averiguen como saber si ela rchivo esta abierto y cerrarlo ' antes de grabar uno nuevo Documento.Save(Archivo) Catch ex As Exception End Try Dim rot(3) As Double rot(0) = 1.5 rot(1) = 2 rot(2) = 100 rot(3) = 8 PoneMarcaAgua(Archivo,txMarca.Text,rot) Process.Start(Archivo) End Sub Public Sub PoneMarcaAgua(ByVal FileName As String, ByVal Texto As String, byval rotacion() As Double) Dim watermark As String = Texto Const emSize As Integer = 75 ' Crea la fuente Dim font As New XFont("Times", emSize, XFontStyle.Italic) ' Abre el pdf existente Dim document As PdfDocument = PdfReader.Open(filename) ' fija la version a PDF 1.4 (Acrobat 5) ya que usamos transparencia If document.Version < 14 Then document.Version = 14 End If For idx As Integer = 0 To document.Pages.Count - 1 Dim page As PdfPage = document.Pages(idx) ' Crea el XGrafics para el dibujo Dim gfx As XGraphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend) Dim size As XSize = gfx.MeasureString(watermark, font) gfx.TranslateTransform(gfx.PageSize.Width / rotacion(0), gfx.PageSize.Height / rotacion(1)) gfx.RotateTransform(-Math.Atan(gfx.PageSize.Height / gfx.PageSize.Width) * 180 / Math.PI) gfx.TranslateTransform(-gfx.PageSize.Width / rotacion(2), -gfx.PageSize.Height / rotacion(3)) Dim path As New XGraphicsPath() path.AddString(watermark, font.FontFamily, XFontStyle.Italic, 75, _ New XPoint((page.Width.Centimeter - size.Width) / 2, _ (page.Height.Centimeter - size.Height) / 2), _ XStringFormat.Default) Dim pen As New XPen(XColor.FromArgb(128, 255, 150, 150), 2) gfx.DrawPath(pen, path) Next document.Save(filename) End Sub End Class
Como se puede observar en el código, el objeto principal del pdf es el XGraphics, el cual tiene los métodos DrawString, DrawImage, Draw....., para insertar lo que se requiera en nuestro documento
No hay comentarios:
Publicar un comentario