Buenas en este post voy a continuar con el tema que empezamos en un post anterior
de crear pdfs con .NET e iTextSharp.
¿Qué es lo que pasa si nuestro pdf es editable? Pues bien aquí hay una
solución mejor que ir escribiendo líneas en el pdf en una determinada
posición como si se tratara de una máquina de escribir, que es como lo hicimos en el post anterior.
Para ello sencillamente vamos ir asignado valores a los campos que tenemos
ya creados en el pdf editable. ¿Pues cómo sé el nombre de los campos?
Hay 2 formas: la primera usando el Acrobat Profesional o similar. En el
Acrobat Profesional vamos a ‘Herramientas’ – ‘Formularios’ – ‘Editar’
Y verás el nombre de los campos en lista que aparece en el lado derecho. Para cada campo si
haces click con el botón derecho en ‘Propiedades’ puedes ver además del
nombre, los valores permitidos para ese campo, cosa interesante a saber si
trabajamos con Checkboxes, RadioButtons, etc.
Otra forma es con el siguiente código, que esta vez sí está disponible para descargar aquí –no como el del anterior post que por no colgarlo en la nube desapareció al romperse un disco duro-.
'Leer el nombre de
los campos del pdf editable
Dim
pdfReader As New
iTextSharp.text.pdf.PdfReader(ruta)
Dim sb As New StringBuilder()
For Each de As KeyValuePair(Of String, AcroFields.Item) In
pdfReader.AcroFields.Fields
sb.Append(de.Key.ToString() &
vbNewLine)
Next
TextBoxDetails.Text = sb.ToString()
TextBoxDetails.SelectionStart =
TextBoxDetails.TextLength
Pues bien el proceso para escribir en pdfs editables en muy sencillo y he creado
un formulario para enseñar a hacerlo.
El punto de partida en el que me he
basado para este ejemplo es el siguiente: imaginemos que somos una empresa con sede en Madrid y
vamos a dar de alta un centro de trabajo en Navarra. Como sabemos en los
artículos 19 y 33 del concierto económico con Navarra si nuestra cifra de
negocios es inferior a los 7 M€ vamos a tributar y presentar las declaraciones
de IVA y Sociedades en el lugar donde tengamos nuestro domicilio fiscal y
supongo que es en Madrid. En Navarra sólo presentaremos retenciones -y el alta
de IAE en Pamplona-. Pues bajo este supuesto real que puede ocurrir en
cualquier empresa vamos a diseñar un formulario que me permita agilizar los
pasos. Ya sé que en este caso no merecería la pena pero hay casos similares
donde hay procesos repetitivos con formularios que se pueden agilizar, y mucho.
Pues bien diseñamos el formulario –veréis que falta el CIF y las validaciones y algunos campos identificativos más, pero he querido centrarme en el
hecho de rellenar el pdf-.
Al pulsar en el botón 'F65 Navarra' vamos a escribir el siguiente código:
'la variable ruta
es la ruta completa del fichero
Dim
pdfStamper As iTextSharp.text.pdf.PdfStamper = Nothing
Try
'Modelo
IAE Ayuntamiento de Pamplona
If
Not ruta = String.Empty
Then
Dim
pdfReader As New
iTextSharp.text.pdf.PdfReader(ruta)
'Modifico el
nombre del pdf para no sobreescribir el original
Dim
rutafinal As String
= Path.GetDirectoryName(ruta)
Dim
nombrefinal As String
= Path.GetFileName(ruta).Insert(0, "PDF Modificado ")
'Guardo
el pdf relleno
pdfStamper = New iTextSharp.text.pdf.PdfStamper(pdfReader,
New FileStream(rutafinal
& "\" & nombrefinal, FileMode.Create))
Dim
pdfFormFields As AcroFields
= pdfStamper.AcroFields
'Relleno los
campos
pdfFormFields.SetField("_Nombre", Me.NombreTextBox.Text
& " " & Me.ApellidosTextBox.Text)
pdfFormFields.SetField("O300", "INSTALACIONES
DEPORTIVAS")
pdfFormFields.SetField("EpigrafeIAE", "1/957")
pdfFormFields.SetField("_Locali_", "PAMPLONA")
pdfFormFields.SetField("_Provin_", "NAVARRA")
pdfFormFields.SetField("O310", Now.Day & "-" & Now.Month & "-" & Now.Year)
pdfFormFields.SetField("O99", "Yes")
pdfFormFields.SetField("100", Now.Year)
pdfStamper.FormFlattening = True
MessageBox.Show("Modelo creado con éxito en: " &
rutafinal & "\" &
nombrefinal, "Mensaje", MessageBoxButtons.OK)
'
close the pdf
pdfStamper.Close()
End
If
Catch
ex As Exception
MessageBox.Show(ex.Message,
"Error", MessageBoxButtons.OK,
MessageBoxIcon.Error)
Finally
If Not pdfStamper Is Nothing Then
pdfStamper.Close()
End
If
End Try
Pues bien en el siguiente post colgaré la nueva versión beta para SEPA del
Norma34Creator en la que estoy trabajando a la que le falta un poquillo más de
testeo así como más cosas en las que me estoy reciclando como temas de boostrap, de jquery y más cosillas que vea interesante por ahí que merenca la pena comentar.
Gracias por el aporte :)
ResponderEliminarPor favor presenta un formulario más complejo
Hola me parece muy interesante lo que muestras, pero hay forma de hacerlo con php? gracias de antemano y excelente dia
ResponderEliminarhola buenas como puedo cambiar el aspecto de un boton, es decir su color de fondo y el color d la letra mediante codigo en VB NET
ResponderEliminarEstá muy bien, pero cuando el textbox tiene carácteres con acentos o contiene una Ñ o Ç, no se ven en el PDF
ResponderEliminar