Tienes un PDF generado por tu programa de nomina (pongamos A3NOM). En un solo archivo tienes las nominas de todos los empleados. Los textos en el PDF son accesibles, puedes copiar por ejemplo el DNI del empleado y el NIF de la empresa.
Tu necesitas guardar cada página en un fichero que tenga por nombre DNI
Solución:
Descargas itext desde http://sourceforge.net/projects/itextsharp/
Luego construyes una rutina que vaya recorriendo todas las páginas.
En cada una extraes el texto con GetTextFromPage
Luego extraes el dni y el nif con las expresiones regulares correspondientes.
Finalmente extraes y guardas la página en un archivo con el nombre deseado.
Mejor verlo en código:
Imports iTextSharp.text.pdf, System.Text, System.IO, System.Text.RegularExpressions
Sub recorrePaginas(ByVal archivo As String)
Dim rgDNI = New Regex("\d{8}[A-Z]")
Dim rgNIF = New Regex("[A-Z]\d{8}")
Dim lectorPDF = New PdfReader(archivo)
Dim TotalPaginas = lectorPDF.NumberOfPages
For Pagina = 1 To TotalPaginas
Console.WriteLine(Pagina.ToString + "\" + TotalPaginas.ToString)
Dim texto = parser.PdfTextExtractor.GetTextFromPage(lectorPDF, Pagina)
texto = Encoding.UTF8.GetString (ASCIIEncoding.Convert (Encoding.Default,
Encoding.UTF8, Encoding.Default.GetBytes(texto)))
Dim DNI = rgDNI.Match(texto).Value
Dim NIF = rgNIF.Match(texto).Value
Dim nombreArchivo = String.Format("c:\pruebas\{0}-{1}.pdf", DNI, NIF)
If File.Exists(nombreArchivo) Then File.Delete(nombreArchivo)
Dim doc = New iTextSharp.text.Document(lectorPDF.GetPageSizeWithRotation(Pagina))
Dim escritor = New PdfCopy(doc, File.Create(nombreARchivo))
doc.Open()
Dim paginaPDF = escritor.GetImportedPage(lectorPDF, Pagina)
escritor.AddPage(paginaPDF)
doc.Close()
escritor.Close()
Next
End Sub
Comentario:
Hay que ver como nos complican la vida los programadores de gestiones nominas y demás.
Con lo sencillo que sería dar la opción de generar en PDF separados la nominas y exportar en texto la información mas basica asociada al PDF.
¡Pero que se puede esperar de una gente que siempre escribe lo nombres de los campos en mayúsculas
2 comentarios:
Hola buenos días,
Habría alguna posibilidad de que compilases el código y lo compartieses.
Es que no tengo mucha idea de programación y lo que propone es exactamente lo que necesito.
Muchas gracias.
Lo siento Jesús no es tan fácil.El código que muestro forma parte de una aplicación que se integra en nuestras bases de datos.
Publicar un comentario