Imprimir página | Cerrar ventana

Firma electrónica de informes

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84862
Fecha de impresión: 28/Marzo/2024 a las 11:05


Tema: Firma electrónica de informes
Publicado por: jregistros
Asunto: Firma electrónica de informes
Fecha de publicación: 28/Noviembre/2019 a las 15:10
Hola a tod@s. Necesito crear un informe a través de Access y remitirlo vía email. Previamente debe ser firmado con certificado electrónico reconocido.

Ahora lo estoy haciendo manualmente: el informe se convierte a pdf, lo firmo con el certificado de la FNMT y lo envío por email.

¿Alguna idea de cómo automatizar el proceso?

Un saludo.



Respuestas:
Publicado por: Maverick2019
Fecha de publicación: 03/Diciembre/2019 a las 10:27
Hola
Prueba el PDF Creator, tal como indican aquí:  https://www.emezeta.com/articulos/como-firmar-pdf-con-certificado-digital" rel="nofollow - https://www.emezeta.com/articulos/como-firmar-pdf-con-certificado-digital

Salu2,


Publicado por: jregistros
Fecha de publicación: 04/Diciembre/2019 a las 00:11
Muchas gracias, utilizo la impresora de pdf creator para crear pdf's pero desconocía la sección pdf/signature. Lo investigaré. 
Saludos.


Publicado por: Curcile
Fecha de publicación: 09/Diciembre/2019 a las 21:13
Yo en vez del pdf creator, lo que hago es convertir con esta web https://www.convertidor.es" rel="nofollow - www.convertidor.es   y me va perfecto


Publicado por: Mihura
Fecha de publicación: 09/Diciembre/2019 a las 23:34
Curcile,

¿Y en dónde te permite incluir la firma digital? .... no lo encuentro Geek


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: jregistros
Fecha de publicación: 10/Diciembre/2019 a las 17:17
Publicado originalmente por Mihura Mihura escribió:

Curcile,

¿Y en dónde te permite incluir la firma digital? .... no lo encuentro Geek

En la última versión de pdf creator free 3.5.1:
Perfiles-> seguridad -> activas firma y eliges el archivo con el certificado digital.


Publicado por: Mihura
Fecha de publicación: 10/Diciembre/2019 a las 18:48
jregistros,

No era a ti la pregunta, sino a Curcile que pone el link de una web y no se ver en ésta dónde está lo de la firma digital.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Maverick2019
Fecha de publicación: 11/Diciembre/2019 a las 16:12
jregistros, si tienes algún resultado (positivo o negativo) indícanoslo en éste hilo, para tener documentado el tema para futuros usuarios 


Publicado por: Istb
Fecha de publicación: 13/Abril/2021 a las 09:57
Publicado originalmente por Mihura Mihura escribió:

Curcile,

¿Y en dónde te permite incluir la firma digital? .... no lo encuentro Geek


Hola Mihura,

Si quieres utilizar en tu empresa la firma electrónica, te recomiendo la aplicación de Firmafy. La he estado probando y está muy bien de precio en comparación a otras, y la recomiendo para firmar rápido cualquier documento.

Espero poder ayudarte con esto, por aquí te dejo el enlace a la página:[URL=http://firmafy.com/]


Publicado por: acilu55
Fecha de publicación: 13/Abril/2021 a las 12:52
el programa Autofirma es gratuito y con el puedes firmar un documento desde access, e incluso hacer o no visible la firma digital con multiples variables.
puedes hacerlo mediante una llamada a un .bat desde la consola o abrirlo con Shell., seleccionar el certificado si tienes varios (FMNT, DNI etc) en fin bastante completo y facil de usar

ruta = "AutoFirmaCommandLine.exe sign -certgui -i " & Me.Lista23.ItemData(n) & " -o " & Left(Me.Lista23.ItemData(n), Len(Me.Lista23.ItemData(n)) - 4) & "-firmado.pdf" & " -format auto -store auto -password ******* -alias CertFirmaDigital"

Shell ruta

'en la lista23 está el fichero que quiero firmar
si son varios hago un bucle, pero en este caso tengo que colocar la posición de la firma uno por no si esta es diferente.


-------------
Gracias a todos de antemano


Publicado por: acilu55
Fecha de publicación: 13/Abril/2021 a las 12:57
el parametro -certgui te permite colocar la firma donde quieras y hacerla visible, incluso poner una firma reducida en todas las paginas, si usas -cert la firma será invisible. Dado que es una firma digital, la validez en ambos casos es la misma, dependerá de tu certificado únicamnte.

-------------
Gracias a todos de antemano


Publicado por: acilu55
Fecha de publicación: 13/Abril/2021 a las 20:08
mas sencillo todavia

shell AutoFirmaCommandLine.exe sign -certgui -i c:\su\fichero.pdf -o c:\su\ficherofirmado.pdf 


-------------
Gracias a todos de antemano


Publicado por: robertocm
Fecha de publicación: 04/Diciembre/2021 a las 15:37
Buenos días,

Creo que la función Shell no se adapta bien para http://www.cpearson.com/Excel/ShellAndWait.aspx" rel="nofollow - esperar a que AutoFirma finalice (pensando en abrir el pdf tras la firma y/o firmar varios archivos en una carpeta).

Estoy haciendo unas pruebas con AutoFirma desde Excel VBA (de Access ni idea...)

#If VBA7 Then
    'http://www.jkp-ads.com/articles/apideclarations.asp
    Public Declare PtrSafe Function PlayWavSound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
#Else
    Public Declare Function PlayWavSound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal LpszSoundName As String, ByVal uFlags As Long) As Long
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If
Sub test()
Dim sFolder As String, SoundName As String
sFolder = CreateObject("WScript.Shell").specialfolders("Desktop")

'===== AutoFirma =====
Dim sFileAutoFirma As String
Dim sInputFile As String
Dim sOutputFile As String
Dim sFileCert As String
Dim sPwdCert As String
Dim sNIF As String
Dim sConfig As String
Dim iPositionOnPageUpperRightX As Integer
Dim iPositionOnPageUpperRightY As Integer
Dim iPositionOnPageLowerLeftX As Integer
Dim iPositionOnPageLowerLeftY As Integer
Dim sFontColor As String
Dim iFontSize As Integer
Dim iFontFamily As Integer
Dim iFontStyle As Integer
Dim iSignaturePage As Integer
Dim slayer2Text As String

sFileAutoFirma = "C:\Archivos de programa\AutoFirma\AutoFirma\AutoFirma.exe"
    'sFileAutoFirma = "C:\Program Files\AutoFirma\AutoFirma\AutoFirma.exe"
    'sFileAutoFirma = "C:\Program Files\AutoFirma\AutoFirma\AutoFirmaCommandLine.exe"
sInputFile = sFolder & "\test.pdf"
sOutputFile = Replace(sInputFile, ".pdf", "_signed.pdf")
sFileCert = sFolder & "\Ciudadano_autenticación_activo.pfx"
sPwdCert = "369258"
sNIF = "99999018D"
iPositionOnPageUpperRightX = 540
iPositionOnPageUpperRightY = 174
iPositionOnPageLowerLeftX = 350
iPositionOnPageLowerLeftY = 92
sFontColor = "black"
iFontSize = 8
iFontFamily = 1
iFontStyle = "0"
iSignaturePage = -1
'Sólo para versión 1.6 o superior
'slayer2Text = "\nlayer2Text=Firma $$ORGANIZATION$$ $$SIGNDATE=dd/MM/yyyy$$ (cert FNMT)"

sConfig = "signaturePositionOnPageLowerLeftX=" & iPositionOnPageLowerLeftX & "\n" _
   & "signaturePositionOnPageLowerLeftY=" & iPositionOnPageLowerLeftY & "\n" _
   & "signaturePositionOnPageUpperRightX=" & iPositionOnPageUpperRightX & "\n" _
   & "signaturePositionOnPageUpperRightY=" & iPositionOnPageUpperRightY & "\n" _
   & "layer2FontColor=" & sFontColor & "\n" _
   & "layer2FontSize=" & iFontSize & "\n" _
   & "layer2FontFamily=" & iFontFamily & "\n" _
   & "layer2FontStyle=" & iFontStyle & "\n" _
   & "signaturePage=" & iSignaturePage _
   & slayer2Text

Dim s As String
s = AutoFirma(sFileAutoFirma, sInputFile, sOutputFile, sFileCert, sPwdCert, sNIF, sConfig)
Debug.Print s

SoundName = "C:\WINDOWS\Media\Chimes.wav" 'tada.wav, ir_begin.wav
PlayWavSound SoundName, 1

Call ShellExecute(0&, vbNullString, sOutputFile, vbNullString, vbNullString, vbNormalFocus)
End Sub
Function AutoFirma(sFileAutoFirma As String, _
                    sInputFile As String, _
                    sOutputFile As String, _
                    sFileCert As String, _
                    sPwdCert As String, _
                    sNIF As String, _
                    sConfig As String) As String
'https://github.com/ctt-gob-es/clienteafirma/issues/20
'AutoFirma: Firmar desde linea de comandos
'Author: Joaquín Ferrero, Mar 6 '21 (joaquinferrero)

Dim objShell As Object, objCmdExec As Object, sCmd As String
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
'Check if the Windows Script Host object was created.
If Err.Number <> 0 Then
    MsgBox "Couldn't create the WshShell object", vbCritical, "Error"
    GoTo CleanUp
End If
On Error GoTo ExceptionHandling

sCmd = Chr(34) & sFileAutoFirma & Chr(34) _
    & " sign -i " & Chr(34) & sInputFile & Chr(34) _
    & " -o " & Chr(34) & sOutputFile & Chr(34) _
    & " -format pades" _
    & " -store pkcs12:" & Chr(34) & sFileCert & Chr(34) _
    & " -password " & sPwdCert _
    & " -filter subject.contains:" & sNIF _
    & " -config " & Chr(34) & sConfig & Chr(34)

Set objCmdExec = objShell.exec(sCmd)
AutoFirma = objCmdExec.StdOut.ReadAll

CleanUp:
    On Error Resume Next
    Exit Function
ExceptionHandling:
    MsgBox "Error: " & Err.Description
    Resume CleanUp
    Resume 'for debugging
End Function


Publicado por: Mihura
Fecha de publicación: 04/Diciembre/2021 a las 15:53
Utiliza el Shell de WScript, te permite ejecución síncrona / asíncrona ...

    ' firmamos el fichero
    Set WSHShell = CreateObject("WScript.Shell")
    ' este saca el cuadro para elegir el certificado
    WSHShell.Run("AutoFirmaCommandLine.exe sign -certgui -i """ & RutaFichero & """ -o """ & RutaFicheroFirmado & """ -format facturae", 7, True)

Edito: por cierto, la misma rutina que te funcione en VBA-Excel te funciona en VBA-Access.


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: main
Fecha de publicación: 06/Diciembre/2021 a las 12:38
Hola
Aunque yo no lo he probado, pero si lo tenia por un cajón, lo he rescatado y lo pongo aqui por si fuera de interes apara mejorar esas rutinas.

1.- Con GUI, para que el usuario seleccione certificado, pero pasando los archivos para Facturae:
'AutoFirmaCommandLine.exe sign -gui -i "path\archivo.xml" -o "path\archivo.xml_signed.xsig" -format facturae -store auto

'SACADO CON KEYTOOL

2.- Sin GUI, pasando los datos del certificado:
'AutoFirmaCommandLine.exe sign -i "path\archivo.xml" -o "path\archivo.xml_signed.xsig" -format facturae -store auto -password XXXXXXXX -alias

3 Sin GUI, para firma de PDF, pasando los datos
'AutoFirmaCommandLine.exe sign -i "path\archivo.pdf" -o "path\archivo_signed.pdf" -format pades -store auto -password XXXXXXXX -alias

Saludos



Imprimir página | Cerrar ventana