Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.

En este ejemplo:

  • En la transacción existen dos destinatarios: el remitente y un cliente.

  • La transacción tiene dos documentos.

  • Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.

  • El PDF de muestra utilizado en esta guía puede descargarse aquí.

El siguiente código firmará todas las firmas de la transacción.

  //Package   PackageBuilder packageToBuild = PackageBuilder.newPackageNamed("Sign Documents Test");   //Sender   SignerBuilder signer1 = SignerBuilder.newSignerWithEmail("[email protected]")   .withFirstName("Haris")   .withLastName("Haidary")   .withCustomId("Sender");   //Client   SignerBuilder signer2 = SignerBuilder.newSignerWithEmail("[email protected]")   .withFirstName("John")   .withLastName("Smith")   .withCustomId("Signer");   //Sender signature on first document   SignatureBuilder signature1 = SignatureBuilder.signatureFor("[email protected]")   .withPositionAnchor(TextAnchorBuilder.newTextAnchor("Signature of the Contractor")   .atPosition(TextAnchorPosition.TOPLEFT)   .withSize(150, 40)   .withOffset(0, -50)   .withCharacter(0)   .withOccurence(0));   //Client signature on first document   SignatureBuilder signature2 = SignatureBuilder.signatureFor("[email protected]")   .withPositionAnchor(TextAnchorBuilder.newTextAnchor("Signature of the Client")   .atPosition(TextAnchorPosition.TOPLEFT)   .withSize(150, 40)   .withOffset(0, -50)   .withCharacter(0)   .withOccurence(0));   //First document   DocumentBuilder document1 = DocumentBuilder.newDocumentWithName("Cleaning Contract")   .fromFile("DOC_FILE_PATH")   .withSignature(signature1)   .withSignature(signature2);   //Build package   DocumentPackage packageToSend = packageToBuild.withSigner(signer1).withSigner(signer2).withDocument(document1).withDocument(document2).build();   //Create and send package   PackageId packageId = client.createAndSendPackage(packageToSend);   //sign all documents for sender   client.signDocuments(packageId); 

La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.

Esta función no funcionará para las firmas de captura.

Resultados

Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.

En este ejemplo:

  • En la transacción existen dos destinatarios: el remitente y un cliente.

  • La transacción tiene dos documentos.

  • Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.

  • El PDF de muestra utilizado en esta guía puede descargarse aquí.

El siguiente código firmará todas las firmas de la transacción.

  //Package   PackageBuilder packageToBuild = PackageBuilder.NewPackageNamed("Sign Documents Test");   //Sender   SignerBuilder signer1 = SignerBuilder.NewSignerWithEmail("[email protected]")   .WithFirstName("Haris")   .WithLastName("Haidary")   .WithCustomId("Sender");   //Client   SignerBuilder signer2 = SignerBuilder.NewSignerWithEmail("[email protected]")   .WithFirstName("John")   .WithLastName("Smith")   .WithCustomId("Signer");   //Sender signature on first document   SignatureBuilder signature1 = SignatureBuilder.SignatureFor("[email protected]")   .WithPositionAnchor(TextAnchorBuilder.NewTextAnchor("Signature of the Contractor")   .AtPosition(TextAnchorPosition.TOPLEFT)   .WithSize(150, 40)   .WithOffset(0, -50)   .WithCharacter(0)   .WithOccurrence(0));   //Client signature on first document   SignatureBuilder signature2 = SignatureBuilder.SignatureFor("[email protected]")   .WithPositionAnchor(TextAnchorBuilder.NewTextAnchor("Signature of the Client")   .AtPosition(TextAnchorPosition.TOPLEFT)   .WithSize(150, 40)   .WithOffset(0, -50)   .WithCharacter(0)   .WithOccurrence(0));   //First document   DocumentBuilder document1 = DocumentBuilder.NewDocumentNamed("Cleaning Contract")   .FromFile("DOC_FILE_PATH")   .WithSignature(signature1)   .WithSignature(signature2);   //Build package   DocumentPackage packageToSend = packageToBuild.WithSigner(signer1).WithSigner(signer2).WithDocument(document1).WithDocument(document2).Build();   //Create and send package   PackageId packageId = client.CreateAndSendPackage(packageToSend);   //Sign all documents for sender   client.SignDocuments(packageId); 

La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.

Esta función no funcionará para las firmas de captura.

Resultados

Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.

En este ejemplo:

  • En la transacción existen dos destinatarios: el remitente y un cliente.

  • La transacción tiene dos documentos.

  • Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.

  • El PDF de muestra utilizado en esta guía puede descargarse aquí.

Solicitud HTTP

POST /api/packages

Encabezados HTTP

Accept: application/json   
Content-Type: multipart/form-data   
Authorization: Basic api_key 

Carga útil de solicitud

 -- -- --WebKitFormBoundary1bNO60n7FqP5WO4t Content - Disposition: form - data;
name = "file";
filename = "testDocumentExtraction.pdf"
Content - Type: application / pdf % PDF - 1.5 % µµµµ 1 0 obj < >>> endobj....-- -- --WebKitFormBoundary1bNO60n7FqP5WO4t Content - Disposition: form - data;
name = "payload"
"roles": [{
	"id": "Signer",
	"type": "SIGNER",
	"signers": [{
		"firstName": "John",
		"lastName": "Smith",
		"email": "[email protected]"
	}],
	"name": "Signer"
}, {
	"id": "Sender",
	"type": "SIGNER",
	"signers": [{
		"firstName": "Haris",
		"lastName": "Haidary",
		"email": "[email protected]"
	}],
	"name": "Sender"
}], "documents": [{
	"approvals": [{
		"fields": [{
			"type": "SIGNATURE",
			"extract": false,
			"extractAnchor": {
				"text": "Signature of the Client",
				"index": 0,
				"width": 150,
				"height": 40,
				"anchorPoint": "TOPLEFT",
				"characterIndex": 0,
				"leftOffset": 0,
				"topOffset": -50
			},
			"left": 0,
			"subtype": "FULLNAME",
			"top": 0
		}, {
			"value": null,
			"type": "INPUT",
			"binding": "{signer.name}",
			"extract": false,
			"extractAnchor": {
				"text": "(hereafter referred to as",
				"index": 0,
				"width": 150,
				"height": 20,
				"anchorPoint": "TOPRIGHT",
				"characterIndex": 0,
				"leftOffset": -175,
				"topOffset": -5
			},
			"left": 0,
			"subtype": "LABEL",
			"top": 0
		}, {
			"value": null,
			"type": "INPUT",
			"binding": "{approval.signed}",
			"extract": false,
			"extractAnchor": {
				"text": "Date",
				"index": 0,
				"width": 75,
				"height": 40,
				"anchorPoint": "TOPRIGHT",
				"characterIndex": 4,
				"leftOffset": 10,
				"topOffset": -30
			},
			"left": 0,
			"subtype": "LABEL",
			"top": 0
		}],
		"role": "Signer"
	}, {
		"fields": [{
			"type": "SIGNATURE",
			"extract": false,
			"extractAnchor": {
				"text": "Signature of the Contractor",
				"index": 0,
				"width": 150,
				"height": 40,
				"anchorPoint": "TOPLEFT",
				"characterIndex": 0,
				"leftOffset": 0,
				"topOffset": -50
			},
			"subtype": "FULLNAME"
		}],
		"role": "Sender"
	}],
	"id": "contract",
	"name": "Sample Contract"
}], "name": "Sign Documents Test", "type": "PACKAGE", "language": "en", "autoComplete": true, "status": "SENT"
}-- -- --WebKitFormBoundary1bNO60n7FqP5WO4t--

Para obtener una descripción completa de cada campo, consulte la tabla Carga útil de solicitud siguiente.

Carga útil de respuesta

 {   "id": "9sKhW-h-qS9m6Ho3zRv3n2a-rkI="   } 

Una vez que haya enviado su transacción, realice una solicitud POST a:

Solicitud HTTP

POST /api/packages/{packageId}/documents/signed_documents

Encabezados HTTP

Accept: application/json   
Content-Type: application/json   
Authorization: Basic api_key 
 {   "documents": [   {   "id": "contract",   "name": "Sample Contract"   }   ]   } 

La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.

Esta función no funcionará para las firmas de captura.

Resultados

Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.

Tabla de carga útil de solicitud

PropiedadTipoEditableObligatorioPredeterminadoValores de ejemplo
statusstringNoBORRADORBORRADOR / ENVIADO / COMPLETADO / ARCHIVADO / RECHAZADO / ELEGIR NO HACERLO / CADUCÓ
autoCompletebooleanNotruetrue / false
typestringNoPAQUETEPAQUETE / FORMULARIO / FORMATO
namestringn/aEjemplo de extracción de delimitadores de texto de la API REST
languagestringenen / fr / de ...
documents
namestringNon/aEjemplo de contrato
approvals
rolestringNon/aclient
fields
typestringn/aFIRMA / ENTRADA
extractbooleanNofalsetrue / false
subtypestringn/aNOMBRE COMPLETO / INICIALES / CAPTURA / CAPTURA_MÓVIL / ETIQUETA / CAMPO DE TEXTO / ÁREA DE TEXTO / CASILLA DE VERIFICACIÓN / FECHA / RADIO / LISTA
bindingstringNonullnull / {approval.signed} / {signer.title} / {signer.name} / {signer.company}
leftintegerNo00 / 10 / 20 ...
topintegerNo00 / 10 / 20 ...
extractAnchor
textstringn/aFirma del Cliente
anchorPointstringn/aTOPLEFT / TOPRIGHT / BOTTOMLEFT / BOTTOMRIGHT
indexintegerNo00 / 1 / 2 ...
widthintegerNo200150
characterIndexintegerNo00
heightintegerNo5040
leftOffsetintegerNo040
rightOffsetintegerNo0-10
roles
idstringNon/aclient
indexintegerNo01 / 2 / 3 ...
namestringNon/aclient
typestringNoFIRMANTEFIRMANTE / REMITENTE
signers
emailstringn/a[email protected]
firstNamestringn/aErnesto
lastNamestringn/aPuente
idstringNon/aclient

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.

En este ejemplo:

  • En la transacción existen dos destinatarios: el remitente y un cliente.

  • La transacción tiene dos documentos.

  • Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.

  • El PDF de muestra utilizado en esta guía puede descargarse aquí.

Después de haber enviado su paquete para su firma, deberá recuperar su packageID. Luego, utilice el siguiente código para firmar todas las firmas de la transacción:

 public void signDocuments(String packageId) 

Resultados

Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.