robertocm Posted November 28, 2021 Share Posted November 28, 2021 (edited) Autofirma is an open source tool quite used in Spain for signing files: http://firmaelectronica.gob.es/Home/Descargas.html I was trying to adapt code found here: https://github.com/ctt-gob-es/clienteafirma/issues/20 In the example below i get the signed file, but don't know how to personalize the signature text using AutoFirma fields. expandcollapse popup#cs ---------------------------------------------------------------------------- https://github.com/ctt-gob-es/clienteafirma/issues/20 AutoFirma: Firmar desde linea de comandos Author: Joaquín Ferrero. 2021.03.06 joaquinferrero, Mar 6 '21 Lista de campos para AutoFirma: $$SUBJECTCN$$ Nombre común (CN, Common Name) del titular del certificado de firma. $$ISSUERCN$$ Nombre común (CN, Common Name) del emisor del certificado de firma. $$CERTSERIAL$$ Número de serie del certificado de firma. $$SIGNDATE=PATRÓN$$ Fecha de la firma. $$GIVENNAME$$ Nombre del titular (G, Given Name) (podría estar vacío). $$SURNAME$$ Apellidos del titular (SN, Surname) (podría estar vacío). $$ORGANIZATION$$ Organización (O, Organization) (podría estar vacío). $$REASON$$ Razón por la que se firma el PDF. (podría estar vacío). $$LOCATION$$ Ciudad en la que se firma el PDF. (podría estar vacío). $$CONTACT$$ Información de contacto del firmante del PDF. (podría estar vacío). #===== Formato de fecha: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html ===== ;~ Global $FECHA = "EEEE d 'de' MMMM 'de' yyyy, HH:mm:ss" #===== Texto que queremos que aparezca en la firma ===== ;~ Global $LAYER2TEXT = 'Firmado el $$SIGNDATE=' & $FECHA &'$$' _ ;~ & ' Firma digital de $$GIVENNAME$$ $$SURNAME$$' _ ;~ & ' Certificado emitido por FNMT-RCM' #ce ---------------------------------------------------------------------------- #===== CONFIG ===== Global $NIF = "99999018D" Global $sFileCert = @DesktopDir & "\Ciudadano_autenticación_activo.pfx" ;Global $sFileCert = @DesktopDir & "\myCertificate.p12" Global $sPwdCert = "369258" Global $sInputFile = @DesktopDir & "\test.pdf" Global $sFileAutoFirma = "C:\Archivos de programa\AutoFirma\AutoFirma\autofirma.exe" Global $PositionOnPageLowerLeftX = '350' Global $PositionOnPageLowerLeftY = '92' Global $PositionOnPageUpperRightX = '540' Global $PositionOnPageUpperRightY = '174' Global $l2FontColor = 'black' Global $l2FontSize = '9' Global $l2FontFamily = '1' Global $l2FontStyle = '0' Global $signaturaPage = '1' #===== Configuración para AutoFirma ===== ;Ok: showing predefined text Global $sConfig = 'signaturePositionOnPageLowerLeftX=' & $PositionOnPageLowerLeftX & '\n' _ & 'signaturePositionOnPageLowerLeftY=' & $PositionOnPageLowerLeftY & '\n' _ & 'signaturePositionOnPageUpperRightX=' & $PositionOnPageUpperRightX & '\n' _ & 'signaturePositionOnPageUpperRightY=' & $PositionOnPageUpperRightY & '\n' _ & 'layer2FontColor=' & $l2FontColor & '\n' _ & 'layer2FontSize=' & $l2FontSize & '\n' _ & 'layer2FontFamily=' & $l2FontFamily & '\n' _ & 'layer2FontStyle=' & $l2FontStyle & '\n' _ & 'signaturePage=' & $signaturaPage ;~ Global $sConfig = 'signaturePositionOnPageLowerLeftX=' & $PositionOnPageLowerLeftX & '\n' _ ;~ & 'signaturePositionOnPageLowerLeftY=' & $PositionOnPageLowerLeftY & '\n' _ ;~ & 'signaturePositionOnPageUpperRightX=' & $PositionOnPageUpperRightX & '\n' _ ;~ & 'signaturePositionOnPageUpperRightY=' & $PositionOnPageUpperRightY & '\n' _ ;~ & 'layer2FontColor=' & $l2FontColor & '\n' _ ;~ & 'layer2FontSize=' & $l2FontSize & '\n' _ ;~ & 'layer2FontFamily=' & $l2FontFamily & '\n' _ ;~ & 'layer2FontStyle=' & $l2FontStyle & '\n' _ ;~ & 'signaturePage=' & $signaturaPage & '\n' _ ;~ & 'layer2Text=Firmado por $$GIVENNAME$$ $$SURNAME$$' _ ;<<<<< Fails converting fields to values Global $iReturn = RunWait('"' & $sFileAutoFirma _ & '" sign -i "' & $sInputFile & '"' _ & ' -o "' & StringReplace($sInputFile, ".pdf", "_signed.pdf") & '"' _ & ' -format pades' _ & ' -store pkcs12:"' & $sFileCert & '"' _ & ' -password ' & $sPwdCert _ & ' -filter subject.contains:' & $NIF _ & ' -config "' & $sConfig & '"' _ , "", @SW_HIDE) ConsoleWrite($iReturn & @CRLF) Using: AutoFirma 1.4.3.0 (file from Universidad de Valladolid) and Windows XP. Attached file: a testing certificate file from https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1116&id_menu=68 Ciudadano_autenticación_activo.pfx Edited November 28, 2021 by robertocm Link to comment Share on other sites More sharing options...
robertocm Posted November 29, 2021 Author Share Posted November 29, 2021 (edited) Solved: it seems related with the version of AutoFirma. See page 161: Manual del integrador del MiniApplet v1.6 del Cliente @firma y la compatibilidad de sus despliegues con AutoFirma Code below working ok with AutoFirma 1.6.5 (Windows 7) : Global $sFileAutoFirma = "C:\Program Files\AutoFirma\AutoFirma\AutoFirma.exe" ;or ;Global $sFileAutoFirma = "C:\Program Files\AutoFirma\AutoFirma\AutoFirmaCommandLine.exe" Global $sConfig = 'signaturePositionOnPageLowerLeftX=' & $PositionOnPageLowerLeftX & '\n' _ & 'signaturePositionOnPageLowerLeftY=' & $PositionOnPageLowerLeftY & '\n' _ & 'signaturePositionOnPageUpperRightX=' & $PositionOnPageUpperRightX & '\n' _ & 'signaturePositionOnPageUpperRightY=' & $PositionOnPageUpperRightY & '\n' _ & 'layer2FontColor=' & $l2FontColor & '\n' _ & 'layer2FontSize=' & $l2FontSize & '\n' _ & 'layer2FontFamily=' & $l2FontFamily & '\n' _ & 'layer2FontStyle=' & $l2FontStyle & '\n' _ & 'signaturePage=' & $signaturaPage & '\n' _ & 'layer2Text=Firmado por $$SUBJECTCN$$ el día $$SIGNDATE=dd/MM/yyyy$$ Certificado $$ISSUERCN$$' ;<<<<< OK Another test: all these fields returning data: & 'layer2Text=Firmado por $$LOCATION$$ $$ORGANIZATION$$ $$GIVENNAME$$ $$SURNAME$$. $$SUBJECTCN$$ el día $$SIGNDATE=dd/MM/yyyy$$ Certificado $$ISSUERCN$$' ;<<<<< OK Edited November 29, 2021 by robertocm Link to comment Share on other sites More sharing options...
n3wbie Posted November 3, 2022 Share Posted November 3, 2022 is there a standalone solution for signing with dsc hardware token using autoit or say with help of dll. nearest solution i could find is https://madhurendra.com/pdf-signing-using-hardware-token-dsc-in-python/ But can it be implemented with help of autoit. M totally new to this so directly asking if such solution exists Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now