--- title: "Gestion des mises en page de documents" slug: "managing-document-layouts" updated: 2025-02-27T09:49:23Z published: 2025-02-27T09:49:23Z canonical: "docs.onespan.com/managing-document-layouts" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.onespan.com/llms.txt > Use this file to discover all available pages before exploring further. # Gestion des mises en page de documents [SDK Java](/v1/docs/fr/managing-document-layouts#sdk-java) [.NET SDK](/v1/docs/fr/managing-document-layouts#net-sdk) [API REST](/v1/docs/fr/managing-document-layouts#api-rest) [APEX SDK](/v1/docs/fr/managing-document-layouts#apex-sdk) ## SDK Java Pour télécharger l'exemple complet de code, consultez notre site [Partage de code](https://community.onespan.com/documentation/onespan-sign/codeshare/creating-layouts-java-sdk/). Les modèles et les mises en page répondent au même objectif d'automatisation du processus de signature électronique en réduisant le temps nécessaire à l'envoi de documents comprenant plusieurs blocs de signature et champs de données. Les modèles sont idéaux pour une utilisation au niveau de la transaction; vous pouvez prédéfinir vos signataires, vos documents, les emplacements de signature et les flux de travail de signature électronique afin de rationaliser le processus de signature électronique. Une mise en page, quant à elle, est un type de modèle qui vous permet de créer des emplacements prédéfinis pour vos blocs de signature et vos champs de données dans un document. Il agit comme un « marqueur » de l'emplacement des blocs de signature et des champs de données dans le document. Les mises en page sont utiles pour les utilisateurs qui envoient fréquemment des formulaires qui peuvent être légèrement différents selon le destinataire, mais dont les blocs de signature et les champs de données restent au même endroit dans tout le document. De plus, vous pouvez utiliser plusieurs mises en page par document, et les appliquer à des pages individuelles dans votre transaction. ### Trouver vos mises en page dans l'interface utilisateur Lorsque vous modifiez des documents, vous trouverez toutes vos mises en page enregistrées dans la barre d'outils, comme illustré ci-dessous. Notez que les mises en page ne peuvent être appliquées que lorsque les transactions sont au statut Ébauche. ![Capture](https://cdn.document360.io/038f59a7-abd0-4c14-9de7-3434d28b49fd/Images/Documentation/layout_1(2).png?sv=2026-02-06&spr=https&st=2026-11-13T10%3A57%3A10Z&se=2026-11-13T11%3A57%3A10Z&sr=c&sp=r&sig=%2BIZfaFBnyJhLkPmsFbCrEFJdq0BnD4nhCyQXF8a%2FeSc%3D) ### Création d'une nouvelle mise en page Dans cet exemple, l'extraction de documents est utilisée pour extraire les champs et les enregistrer sous forme de modèle. Pour obtenir plus d'informations, consultez [Extraction de documents](/v1/docs/extraction-de-documents). Après avoir créé votre transaction, utilisez le bouton OneSpan Sign LayoutService pour créer une mise en page à partir de votre transaction. Il est important de noter que Layout ID est nécessaire pour appliquer des mises en page aux documents. Le code suivant permet d'effectuer ce qui suit : ```java String layoutId = eslClient.getLayoutService().createLayout(myPackage);   System.out.println(layoutId); ``` ### Récupération d'une mise en page Le code suivant permet de récupérer une mise en page. La première étape consiste à récupérer les mises en page de la première page. Dans cet exemple, cinq mises en page sont récupérées, mais vous pouvez définir un nombre quelconque. ```java List layouts = eslClient.getLayoutService()    .getLayouts(Direction.DESCENDING, new PageRequest(i, 5)); while (!layouts.isEmpty()) {    // } ``` Ensuite, vous allez créer votre objet itérateur. Cela vous permettra d'itérer dans votre liste de mises en page. ```java Iterator index = layouts.iterator();   while (index.hasNext()) {   ``` Ensuite, récupérez le nom et l'identifiant de votre mise en page. ```java DocumentPackage myLayout = index.next(); System.out.println(myLayout.getName() + " " + myLayout.getId()); i++; } ``` Utilisez le code suivant pour récupérer les mises en page de chaque page de la transaction, en répétant l'opération pour chaque page : ```java layouts = eslClient.getLayoutService().getLayouts(Direction.DESCENDING, new PageRequest(i, 5));   } ``` ### Application des mises en page Utilisez le OneSpan Sign LayoutService pour appliquer des mises en page, soit par Layout ID ou par nom. ```java eslClient.getLayoutService().applyLayout(packageId, "documentId", "layoutId");   eslClient.getLayoutService().applyLayoutByName(packageId, "documentId", "layoutName");   ``` ### Suppression d'une mise en page Pour supprimer une mise en page, utilisez le PackageService(). Le code suivant permet d'effectuer ce qui suit : ```java eslClient.getPackageService().deletePackage(new PackageId("layoutId")); ``` ### Résultats Après avoir exécuté votre code, vous verrez une liste de toutes vos mises en page sous la barre d'outils. Une fois votre mise en page enregistrée, vous pouvez l'appliquer aux documents suivants. ## .NET SDK Pour télécharger l'exemple complet de code, consultez notre site [Partage de code](https://community.onespan.com/documentation/onespan-sign/codeshare/creating-layouts-net-sdk/). Les modèles et les mises en page répondent au même objectif d'automatisation du processus de signature électronique en réduisant le temps nécessaire à l'envoi de documents comprenant plusieurs blocs de signature et champs de données. Les modèles sont idéaux pour une utilisation au niveau de la transaction; vous pouvez prédéfinir vos signataires, vos documents, les emplacements de signature et les flux de travail de signature électronique afin de rationaliser le processus de signature électronique. Une mise en page, quant à elle, est un type de modèle qui vous permet de créer des emplacements prédéfinis pour vos blocs de signature et vos champs de données dans un document. Il agit comme un « marqueur » de l'emplacement des blocs de signature et des champs de données dans le document. Les mises en page sont utiles pour les utilisateurs qui envoient fréquemment des formulaires qui peuvent être légèrement différents selon le destinataire, mais dont les blocs de signature et les champs de données restent au même endroit dans tout le document. De plus, vous pouvez utiliser plusieurs mises en page par document, et les appliquer à des pages individuelles dans votre transaction. ### Trouver vos mises en page dans l'interface utilisateur Lorsque vous modifiez des documents, vous trouverez toutes vos mises en page enregistrées dans la barre d'outils, comme illustré ci-dessous. Notez que les mises en page ne peuvent être appliquées que lorsque les transactions sont au statut Ébauche. ![Capture](https://cdn.document360.io/038f59a7-abd0-4c14-9de7-3434d28b49fd/Images/Documentation/layout_1(3).png?sv=2026-02-06&spr=https&st=2026-11-13T10%3A57%3A10Z&se=2026-11-13T11%3A57%3A10Z&sr=c&sp=r&sig=%2BIZfaFBnyJhLkPmsFbCrEFJdq0BnD4nhCyQXF8a%2FeSc%3D) ### Création d'une nouvelle mise en page Dans cet exemple, l'extraction de documents est utilisée pour extraire les champs et les enregistrer sous forme de modèle. Pour obtenir plus d'informations, consultez [Extraction de documents](/v1/docs/fr/document-extraction). Après avoir créé votre transaction, utilisez le bouton OneSpan Sign LayoutService pour créer une mise en page à partir de votre transaction. Il est important de noter que Layout ID est nécessaire pour appliquer des mises en page aux documents. Le code suivant permet d'effectuer ce qui suit : ```csharp string layoutId = eslClient.LayoutService.CreateLayout(packageFromLayout); Debug.WriteLine(layoutId); ``` ### Récupération d'une mise en page Le code suivant permet de récupérer une mise en page. La première étape consiste à récupérer les mises en page de la première page. Dans cet exemple, cinq mises en page sont récupérées, mais vous pouvez définir un nombre quelconque. ```csharp List layouts = eslClient.getLayoutService().getLayouts(Direction.DESCENDING, new PageRequest(i, 5)); while (!layouts.isEmpty()) {   // ``` Ensuite, vous allez créer votre objet itérateur. Cela vous permettra d'itérer dans votre liste de mises en page. ```csharp Iterator index = layouts.iterator(); while (index.hasNext()) {   ``` Ensuite, récupérez le nom et l'identifiant de votre mise en page. ```csharp DocumentPackage myLayout = index.next(); System.out.println(myLayout.getName() + " " + myLayout.getId());   i++;   }   //     ``` Utilisez le code suivant pour récupérer les mises en page de chaque page de la transaction, en répétant l'opération pour chaque page : ### Application des mises en page Utilisez le OneSpan Sign LayoutService pour appliquer des mises en page, soit par Layout ID ou par nom. ```csharp eslClient.getLayoutService().applyLayout(packageId, "documentId", "layoutId");   eslClient.getLayoutService().applyLayoutByName(packageId, "documentId", "layoutName");   ``` ### Suppression d'une mise en page Pour supprimer une mise en page, utilisez le PackageService(). Le code suivant permet d'effectuer ce qui suit : ```plaintext eslClient.PackageService.DeletePackage(new PackageId("layoutId")); ``` ### Résultats Après avoir exécuté votre code, vous verrez une liste de toutes vos mises en page sous la barre d'outils. Une fois votre mise en page enregistrée, vous pouvez l'appliquer aux documents suivants. ## API REST Pour télécharger l'exemple complet de code, consultez notre site [Partage de code](https://community.onespan.com/documentation/onespan-sign/codeshare/creating-layouts-rest-api/). Les modèles et les mises en page répondent au même objectif d'automatisation du processus de signature électronique en réduisant le temps nécessaire à l'envoi de documents comprenant plusieurs blocs de signature et champs de données. Les modèles sont idéaux pour une utilisation au niveau de la transaction; vous pouvez prédéfinir vos signataires, vos documents, les emplacements de signature et les flux de travail de signature électronique afin de rationaliser le processus de signature électronique. Une mise en page, quant à elle, est un type de modèle qui vous permet de créer des emplacements prédéfinis pour vos blocs de signature et vos champs de données dans un document. Il agit comme un « marqueur » de l'emplacement des blocs de signature et des champs de données dans le document. Les mises en page sont utiles pour les utilisateurs qui envoient fréquemment des formulaires qui peuvent être légèrement différents selon le destinataire, mais dont les blocs de signature et les champs de données restent au même endroit dans tout le document. De plus, vous pouvez utiliser plusieurs mises en page par document, et les appliquer à des pages individuelles dans votre transaction. ### Trouver vos mises en page dans l'interface utilisateur Lorsque vous modifiez des documents, vous trouverez toutes vos mises en page enregistrées dans la barre d'outils, comme illustré ci-dessous. Notez que les mises en page ne peuvent être appliquées que lorsque les transactions sont au statut Ébauche. ![Capture](https://cdn.document360.io/038f59a7-abd0-4c14-9de7-3434d28b49fd/Images/Documentation/layout_1(4).png?sv=2026-02-06&spr=https&st=2026-11-13T10%3A57%3A10Z&se=2026-11-13T11%3A57%3A10Z&sr=c&sp=r&sig=%2BIZfaFBnyJhLkPmsFbCrEFJdq0BnD4nhCyQXF8a%2FeSc%3D) ### Création d'une nouvelle mise en page Dans cet exemple, l'extraction de documents est utilisée pour extraire les champs et les enregistrer sous forme de modèle. Pour obtenir plus d'informations, consultez [Extraction de documents](/v1/docs/fr/document-extraction). Utilisez le code suivant pour créer une mise en page à partir d'un document : #### Requête HTTP ```http POST /api/layouts ``` #### En-têtes HTTP ```http Accept: application/json   Content-Type: application/json   Authorization: Basic api_key ``` #### Données utiles de la demande ```json {  "name": "Layout 02",  "type": "LAYOUT",  "id": "packageId",  "visibility": "SENDER",  "documents": [    {      "id": "documentId"    }  ] } ``` Pour une description complète de chaque champ, voir le tableau des données utiles de la demande ci-dessous. #### Données utiles de la réponse ```json {  "roles": [    {      "id": "bjyxbrypiHw6",      "data": null,      "emailMessage": null,      "attachmentRequirements": [],      "locked": false,      "reassign": false,      "specialTypes": [],      "type": "SENDER",      "index": 0,      "signers": [        {          "group": null,          "language": "en",          "signature": {            "handdrawn": "AQAAADJI+a4cnf0t3Dlf0GqWJceCA+4AAwADAN8BAAADAAAAggPuAOgAAAACfyxAUkAlQCdAOUA6QDtAHEAtQBtACkAJQBVAFBIyfkA0QBVABkAYQCpAHEAtQC9ALkAtQDxAO0A6QEhAN0AlQCQyTjZAgEBwQIBAoFDSUOFQ8lDiUNJQ0lCiQHBAUCIXGVBSUCVQN1BJUDpQXVA9UE5QLlAuUDpQOVAkm1BhQLZAd0B7QFpAXUBPQTBAHkAdQAtAB2AmYBRgQmCAcJVwmHC5Mh42QFBAkECAQKBAsEDAQNBQ8VDyUPJQ81DTULRQg1ByUEGeIgQ6QDhAJ0AmQCZAFItwbHBtMhdBUCafUGJQcVCSUJFQoUDAQKBAsECBQHNAdEBEQDRABkAFYCdgR2BXYHhgd2CIYIVgdmBDYEJAUUBwQIFAkECwQLBA0EDAQLBAoEBwQGASG0xAc0BnQEhASkArQBxADEAKQAlABkAFMkVKUENQUVBBUGFQYVCRUKJQsVDCUNJQsUDQQKBAkEBwQFJAREAlIllVUHFQUVByUKFQslDSUNJQ9VDlUPZQ1lDWUKVQZVBEUCQyCxivr2BjYGRgdGB1YHZgZmBWYEdgRkAFQClAREBjQJNAk0CzQKNAs0CjQJNAQo9gRWBjYJNgs2DCYNRg1GCkYKRgY2Bkrg==",            "textual": null          },          "id": "8ceWLxUo1Gg1",          "delivery": {            "provider": false,            "email": true,            "download": true          },          "knowledgeBasedAuthentication": null,          "auth": {            "scheme": "NONE",            "challenges": []          },          "data": null,          "title": "Silanis",          "external": null,          "updated": "2017-11-14T20:31:34Z",          "phone": "",          "professionalIdentityFields": [],          "userCustomFields": [],          "company": "Silanis",          "email": "haris.haidary@gmail.com",          "firstName": "Haris",          "lastName": "Haidary",          "name": "",          "address": null,          "created": "2017-11-14T20:31:34Z",          "specialTypes": []        }      ],      "name": "Owner"    },    {      "id": "a3bfe56c-da0a-4ff0-bfef-efe55fd28a0c",      "data": null,      "emailMessage": {        "content": ""      },      "attachmentRequirements": [],      "locked": false,      "reassign": false,      "specialTypes": [],      "type": "SIGNER",      "index": 0,      "signers": [],      "name": "Signer1"    },    {      "id": "564fd009-7673-4a5f-9314-5c5b3d5f3869",      "data": null,      "emailMessage": {        "content": ""      },      "attachmentRequirements": [],      "locked": false,      "reassign": false,      "specialTypes": [],      "type": "SIGNER",      "index": 0,      "signers": [],      "name": "Signer2"    }  ],  "status": "DRAFT",  "description": "",  "language": "en",  "id": "rr8lE3YwF-LaCNxSjntn2udM8hc=", "data": {    "origin": "api"  },  "autocomplete": true,  "documents": [    {      "status": "",      "description": "",      "id": "dfe8ac46006b31f6",      "signedHash": null,      "extractionTypes": [],      "signerVerificationToken": null,      "data": {        "ese_document_texttag_extract_needed": "false"      },      "approvals": [        {          "id": "akmT717La0YP",          "role": "a3bfe56c-da0a-4ff0-bfef-efe55fd28a0c",          "data": null,          "signed": null,          "accepted": null,          "fields": [            {              "binding": null,              "validation": null,              "id": "AooaSEwkp0oG",              "page": 0,              "data": null,              "subtype": "FULLNAME",              "height": 40,              "extract": false,              "width": 200,              "extractAnchor": null,              "left": 94,              "top": 752,              "type": "SIGNATURE",              "value": "",              "name": "AooaSEwkp0oG"            }          ],          "name": "AooaSEwkp0oG"        },        {          "id": "anR9R3fLlQYE",          "role": "564fd009-7673-4a5f-9314-5c5b3d5f3869",          "data": null,          "signed": null,          "accepted": null,          "fields": [            {              "binding": null,              "validation": null,              "id": "AvqDbyKBeIoX",              "page": 0,              "data": null,              "subtype": "FULLNAME",              "height": 40,              "extract": false,              "width": 200,              "extractAnchor": null,              "left": 94,              "top": 833,              "type": "SIGNATURE",              "value": "",              "name": "AvqDbyKBeIoX"            }          ],          "name": "AvqDbyKBeIoX"        }      ],      "pages": [        {          "id": "",          "height": 1030,          "width": 796,          "left": 0,          "top": 0,          "version": 0,          "index": 0        }      ],      "external": null,      "extract": false,      "fields": [],      "index": 0,      "name": "cleaning_contract",      "size": 197171    }  ],  "sender": {    "status": "ACTIVE",    "language": "en",    "signature": {      "handdrawn": "AQAAADJI+a4cnf0t3Dlf0GqWJceCA+4AAwADAN8BAAADAAAAggPuAOgAAAACfyxAUkAlQCdAOUA6QDtAHEAtQBtACkAJQBVAFBIyfkA0QBVABkAYQCpAHEAtQC9ALkAtQDxAO0A6QEhAN0AlQCQyTjZAgEBwQIBAoFDSUOFQ8lDiUNJQ0lCiQHBAUCIXGVBSUCVQN1BJUDpQXVA9UE5QLlAuUDpQOVAkm1BhQLZAd0B7QFpAXUBPQTBAHkAdQAtAB2AmYBRgQmCAcJVwmHC5Mh42QFBAkECAQKBAsEDAQNBQ8VDyUPJQ81DTULRQg1ByUEGeIgQ6QDhAJ0AmQCZAFItwbHBtMhdBUCafUGJQcVCSUJFQoUDAQKBAsECBQHNAdEBEQDRABkAFYCdgR2BXYHhgd2CIYIVgdmBDYEJAUUBwQIFAkECwQLBA0EDAQLBAoEBwQGASG0xAc0BnQEhASkArQBxADEAKQAlABkAFMkVKUENQUVBBUGFQYVCRUKJQsVDCUNJQsUDQQKBAkEBwQFJAREAlIllVUHFQUVByUKFQslDSUNJQ9VDlUPZQ1lDWUKVQZVBEUCQyCxivr2BjYGRgdGB1YHZgZmBWYEdgRkAFQClAREBjQJNAk0CzQKNAs0CjQJNAQo9gRWBjYJNgs2DCYNRg1GCkYKRgY2Bkrg==",      "textual": null    },    "id": "ZQI8k6faVoM8",    "data": {      "serviceCredentials": "{}",      "showIntro": false    },    "account": null,    "title": null,    "external": null,    "updated": "2016-05-05T19:30:13Z",    "memberships": [],    "phone": "+1 201-555-5555",    "professionalIdentityFields": [],    "userCustomFields": [      {        "id": "policy_number_id",        "data": null,        "translations": [          {            "description": "Car Insurance Policy Number.",            "language": "en",            "id": "",            "data": null,            "name": "Policy Number"          }        ],        "value": "",        "name": ""      }    ],    "locked": null,    "activated": null,    "company": "eSignLive",    "email": "haris.haidary@gmail.com",    "firstName": "Haris",    "lastName": "Haidary",    "type": "MANAGER",    "name": "",    "address": null,    "created": "2016-05-05T19:30:13Z",    "specialTypes": [],    "hasDelegates": false  },  "emailMessage": "",  "limits": null,  "notarized": false,  "notaryRoleId": null,  "settings": {    "ceremony": {      "layout": {        "header": {          "feedback": true,          "titleBar": null,          "breadcrumbs": true,          "globalActions": {            "confirm": true,            "download": true,            "hideEvidenceSummary": true,            "saveAsLayout": true          },          "globalNavigation": true,          "sessionBar": true        },        "footer": null,        "brandingBar": {          "logo": {            "link": "",            "src": "branding"          }        },        "iframe": false,        "navigator": true      },      "style": null,      "enforceCaptureSignature": false,      "events": {        "complete": {          "redirect": null,          "dialog": true        }      },      "extractAcroFields": true,      "extractTextTags": true,      "inPerson": false,      "declineButton": true,      "declineReasons": [],      "disableDeclineOther": false,      "disableDownloadForUncompletedPackage": false,      "disableFirstInPersonAffidavit": false,      "disableInPersonAffidavit": false,      "disableOptOutOther": false,      "disableSecondInPersonAffidavit": false,      "documentToolbarOptions": null,      "handOver": null,      "hideCaptureText": false,      "hideLanguageDropdown": false,      "hidePackageOwnerInPerson": false,      "hideWatermark": false,      "maxAuthFailsAllowed": 3,      "optOutButton": true,      "optOutReasons": []    }  },  "signedDocumentDelivery": null,  "trashed": false,  "updated": "2017-11-14T20:31:34Z",  "completed": null,  "consent": null,  "due": null,  "visibility": "SENDER",  "type": "LAYOUT",  "messages": [],  "name": "cleaning_contract",  "created": "2017-11-14T20:31:34Z",  "bulkSendable": true } ``` Il est important de noter que l'option Layout ID est nécessaire pour appliquer des mises en page aux documents. ### Récupération d'une mise en page Vous pouvez également récupérer toutes vos mises en page enregistrées. Le code suivant permet d'effectuer ce qui suit : #### Requête HTTP ```http GET /api/layouts?from={fromPage}&to={toPage} ``` #### En-têtes HTTP ```http Accept: application/json   Content-Type: application/json   Authorization: Basic api_key ``` #### Données utiles de la réponse ```json {  "results": [    {      "roles": [        {          "id": "564fd009-7673-4a5f-9314-5c5b3d5f3869",          "data": null,          "emailMessage": {            "content": ""          },          "attachmentRequirements": [],          "locked": false,          "reassign": false,          "specialTypes": [],          "type": "SIGNER",          "index": 0,          "signers": [],          "name": "Signer2"        },        {          "id": "a3bfe56c-da0a-4ff0-bfef-efe55fd28a0c",          "data": null,          "emailMessage": {            "content": ""          },          "attachmentRequirements": [],          "locked": false,          "reassign": false,          "specialTypes": [],          "type": "SIGNER",          "index": 0,          "signers": [],          "name": "Signer1"        },        {          "id": "bjyxbrypiHw6",          "data": null,          "emailMessage": null,          "attachmentRequirements": [],          "locked": false,          "reassign": false,          "specialTypes": [],          "type": "SENDER",          "index": 0,          "signers": [            {              "group": null,              "language": "en",              "signature": {                "handdrawn": "AQAAADJI+a4cnf0t3Dlf0GqWJceCA+4AAwADAN8BAAADAAAAggPuAOgAAAACfyxAUkAlQCdAOUA6QDtAHEAtQBtACkAJQBVAFBIyfkA0QBVABkAYQCpAHEAtQC9ALkAtQDxAO0A6QEhAN0AlQCQyTjZAgEBwQIBAoFDSUOFQ8lDiUNJQ0lCiQHBAUCIXGVBSUCVQN1BJUDpQXVA9UE5QLlAuUDpQOVAkm1BhQLZAd0B7QFpAXUBPQTBAHkAdQAtAB2AmYBRgQmCAcJVwmHC5Mh42QFBAkECAQKBAsEDAQNBQ8VDyUPJQ81DTULRQg1ByUEGeIgQ6QDhAJ0AmQCZAFItwbHBtMhdBUCafUGJQcVCSUJFQoUDAQKBAsECBQHNAdEBEQDRABkAFYCdgR2BXYHhgd2CIYIVgdmBDYEJAUUBwQIFAkECwQLBA0EDAQLBAoEBwQGASG0xAc0BnQEhASkArQBxADEAKQAlABkAFMkVKUENQUVBBUGFQYVCRUKJQsVDCUNJQsUDQQKBAkEBwQFJAREAlIllVUHFQUVByUKFQslDSUNJQ9VDlUPZQ1lDWUKVQZVBEUCQyCxivr2BjYGRgdGB1YHZgZmBWYEdgRkAFQClAREBjQJNAk0CzQKNAs0CjQJNAQo9gRWBjYJNgs2DCYNRg1GCkYKRgY2Bkrg==",                "textual": null              },              "id": "8ceWLxUo1Gg1",              "delivery": {                "provider": false,                "email": true,                "download": true              },              "knowledgeBasedAuthentication": null,              "auth": {                "scheme": "NONE",                "challenges": []              },              "data": null,              "title": "Silanis",              "external": null,              "updated": "2017-11-14T20:31:34Z",              "phone": "",              "professionalIdentityFields": [],              "userCustomFields": [],              "company": "Silanis",              "email": "haris.haidary@gmail.com",              "firstName": "Haris",              "lastName": "Haidary",              "name": "",              "address": null,              "created": "2017-11-14T20:31:34Z",              "specialTypes": []            }          ],          "name": "Owner"        }      ],      "status": "DRAFT",      "description": "",      "language": "en",      "id": "rr8lE3YwF-LaCNxSjntn2udM8hc=",     "data": {        "origin": "api"      },      "autocomplete": true,      "documents": [        {          "status": "",          "description": "",          "id": "dfe8ac46006b31f6",          "signedHash": null,          "extractionTypes": [],          "signerVerificationToken": null,          "data": {},          "approvals": [            {              "id": "akmT717La0YP",              "role": "a3bfe56c-da0a-4ff0-bfef-efe55fd28a0c",              "data": null,              "signed": null,              "accepted": null,              "fields": [                {                  "binding": null,                  "validation": null,                  "id": "AooaSEwkp0oG",                  "page": 0,                  "data": null,                  "subtype": "FULLNAME",                  "height": 39.99995853281021,                  "extract": false,                  "width": 199.99979266405106,                  "extractAnchor": null,                  "left": 94.00000655210017,                  "top": 752.0005724167823,                  "type": "SIGNATURE",                  "value": "",                  "name": "AooaSEwkp0oG"                }              ],              "name": ""            },            {              "id": "anR9R3fLlQYE",              "role": "564fd009-7673-4a5f-9314-5c5b3d5f3869",              "data": null,              "signed": null,              "accepted": null,              "fields": [                {                  "binding": null,                  "validation": null,                  "id": "AvqDbyKBeIoX",                  "page": 0,                  "data": null,                  "subtype": "FULLNAME",                  "height": 39.99995853281021,                  "extract": false,                  "width": 199.99979266405106,                  "extractAnchor": null,                  "left": 94.00000655210017,                  "top": 832.999669445753,                  "type": "SIGNATURE",                  "value": "",                  "name": "AvqDbyKBeIoX"                }              ],              "name": ""            }          ],          "pages": [            {              "id": "dfe8ac46006b31f6_0_-1_1.png",              "height": 1030,              "width": 796,              "left": 0,              "top": 0,              "version": 0,              "index": 0            }          ],          "external": null,          "extract": false,          "fields": [],          "index": 0,          "name": "cleaning_contract",          "size": 197171        }      ],      "sender": {        "status": "ACTIVE",        "language": "en",        "signature": {          "handdrawn": "AQAAADJI+a4cnf0t3Dlf0GqWJceCA+4AAwADAN8BAAADAAAAggPuAOgAAAACfyxAUkAlQCdAOUA6QDtAHEAtQBtACkAJQBVAFBIyfkA0QBVABkAYQCpAHEAtQC9ALkAtQDxAO0A6QEhAN0AlQCQyTjZAgEBwQIBAoFDSUOFQ8lDiUNJQ0lCiQHBAUCIXGVBSUCVQN1BJUDpQXVA9UE5QLlAuUDpQOVAkm1BhQLZAd0B7QFpAXUBPQTBAHkAdQAtAB2AmYBRgQmCAcJVwmHC5Mh42QFBAkECAQKBAsEDAQNBQ8VDyUPJQ81DTULRQg1ByUEGeIgQ6QDhAJ0AmQCZAFItwbHBtMhdBUCafUGJQcVCSUJFQoUDAQKBAsECBQHNAdEBEQDRABkAFYCdgR2BXYHhgd2CIYIVgdmBDYEJAUUBwQIFAkECwQLBA0EDAQLBAoEBwQGASG0xAc0BnQEhASkArQBxADEAKQAlABkAFMkVKUENQUVBBUGFQYVCRUKJQsVDCUNJQsUDQQKBAkEBwQFJAREAlIllVUHFQUVByUKFQslDSUNJQ9VDlUPZQ1lDWUKVQZVBEUCQyCxivr2BjYGRgdGB1YHZgZmBWYEdgRkAFQClAREBjQJNAk0CzQKNAs0CjQJNAQo9gRWBjYJNgs2DCYNRg1GCkYKRgY2Bkrg==",          "textual": null        },        "id": "ZQI8k6faVoM8",        "data": {          "serviceCredentials": "{}",          "showIntro": false        },        "account": {          "id": "3vD0Dc9Fh7wQ",          "data": null,          "updated": "2016-05-05T19:30:13Z",          "company": {            "id": "jVWmyg4cyis8",            "data": null,            "address": {              "address1": null,              "address2": null,              "city": null,              "country": null,              "zipcode": null,              "state": null            },            "name": "eSignLive"          },          "licenses": [            {              "status": "ACTIVE",              "paidUntil": "2020-05-05T00:00:00Z",              "plan": {                "group": "",                "description": "E-Sign Hundreds of Documents with Unlimited Signers",                "id": "sandbox",                "features": null,                "price": {                  "amount": 0,                  "currency": {                    "id": "USD",                    "data": null,                    "name": "US Dollar"                  }                },                "original": null,                "cycle": "YEAR",                "contract": "YEAR",                "freeCycles": null,                "quotas": [                  {                    "cycle": null,                    "scope": "ACCOUNT",                    "limit": 100,                    "target": "SENDER"                  },                  {                    "cycle": null,                    "scope": "SENDER",                    "limit": 500,                    "target": "DOCUMENT"                  },                  {                    "cycle": null,                    "scope": "SENDER",                    "limit": 500,                    "target": "STORAGE"                  }                ],                "data": null,                "name": "Sandbox"              },              "transactions": [],              "created": "2016-05-05T19:30:13Z"            }          ],          "logoUrl": "",          "providers": null,          "customFields": [            {              "required": false,              "id": "policy_number_id",              "data": null,              "translations": [                {                  "description": "Car Insurance Policy Number.",                  "language": "en",                  "id": "",                  "data": null,                  "name": "Policy Number"                }              ],              "value": "123-456-789-0",              "name": ""            }          ],          "created": "2016-05-05T19:30:13Z",          "owner": "ZQI8k6faVoM8",          "name": "Haris Haidary"        },        "title": null,        "external": null,        "updated": "2016-05-05T19:30:13Z",        "memberships": [],        "phone": "+1 201-555-5555",        "professionalIdentityFields": [],        "userCustomFields": [          {            "id": "policy_number_id",            "data": null,            "translations": [              {                "description": "Car Insurance Policy Number.",                "language": "en",                "id": "",                "data": null,                "name": "Policy Number"              }            ],            "value": "",            "name": ""          }        ],        "locked": null,        "activated": null,        "company": "eSignLive",        "email": "haris.haidary@gmail.com",        "firstName": "Haris",        "lastName": "Haidary",        "type": "MANAGER",        "name": "",        "address": {          "address1": "",          "address2": "",          "city": "",          "country": "",          "zipcode": "",          "state": ""        },        "created": "2016-05-05T19:30:13Z",        "specialTypes": [],        "hasDelegates": false      },      "emailMessage": "",      "limits": null,      "notarized": false,      "settings": {        "ceremony": {          "layout": {            "header": {              "feedback": true,              "titleBar": null,              "breadcrumbs": true,              "globalActions": {                "confirm": true,                "download": true,                "hideEvidenceSummary": true,                "saveAsLayout": true              },              "globalNavigation": true,              "sessionBar": true            },            "footer": null,            "brandingBar": {              "logo": {                "link": "",                "src": "branding"              }            },            "iframe": false,            "navigator": true          },          "style": null,          "enforceCaptureSignature": false,          "events": {            "complete": {              "redirect": null,              "dialog": true            }          },          "extractAcroFields": true,          "extractTextTags": true,          "inPerson": false,          "declineButton": true,          "declineReasons": [],          "disableDeclineOther": false,          "disableDownloadForUncompletedPackage": false,          "disableFirstInPersonAffidavit": false,          "disableInPersonAffidavit": false,          "disableOptOutOther": false,          "disableSecondInPersonAffidavit": false,          "documentToolbarOptions": null,          "handOver": null,          "hideCaptureText": false,          "hideLanguageDropdown": false,          "hidePackageOwnerInPerson": false,          "hideWatermark": false,          "maxAuthFailsAllowed": 3,          "optOutButton": true,          "optOutReasons": []        }      },      "signedDocumentDelivery": null,      "updated": "2017-11-14T20:31:34Z",      "consent": null,      "due": null,      "visibility": "SENDER",      "type": "LAYOUT",      "messages": [],      "name": "cleaning_contract",      "created": "2017-11-14T20:31:34Z",      "notaryRoleId": null,      "bulkSendable": false    }  ],  "count": 5 } ``` De la même manière, pour appliquer une mise en page, vous aurez besoin des éléments suivants packageId, documentId, et layoutId/layoutName pour faire votre demande : Si vous utilisez LayoutID : #### Requête HTTP ```http POST /api/packages/{packageId}/documents/{documentId}/layout?layoutId={layoutId} ``` #### En-têtes HTTP ```http Accept: application/json   Content-Type: application/json   Authorization: Basic api_key ``` Si vous utilisez le nom de la mise en page : #### Requête HTTP ```http POST /api/packages/{packageId}/documents/{documentId}/layout?layoutName={layoutName} ``` #### En-têtes HTTP ```http Accept: application/json   Content-Type: application/json   Authorization: Basic api_key ``` ### Suppression d'une mise en page Pour supprimer une mise en page, utilisez le code suivant : #### Requête HTTP ```http DELETE /api/packages/{layoutId} ``` #### En-têtes HTTP ```http Accept: application/json   Content-Type: application/json   Authorization: Basic api_key ``` ### Résultats Après avoir exécuté votre code, vous verrez une liste de toutes vos mises en page sous la barre d'outils. Une fois votre mise en page enregistrée, vous pouvez l'appliquer aux documents suivants. ### Tableau des données utiles de la demande | Propriété | Type | Modifiable | Requis | Par défaut | Exemples de valeurs | | --- | --- | --- | --- | --- | --- | | type | chaîne de caractères | Oui | Non | PACKAGE | PAQUET / MODÈLE / MISE EN PAGE | | nom | chaîne de caractères | Oui | Oui | s.o. | Exemple de mise en page | | id | chaîne de caractères | Oui | Non | s.o. | rr8lE3YwF-LaCNxSjntn2udM8hc= | | visibilité | chaîne de caractères | Oui | Non | COMPTE | COMPTE / EXPÉDITEUR | | documents | | | | | | | id | chaîne de caractères | Oui | Non | s.o. | exemple-contrat | ## APEX SDK Pour télécharger l'exemple complet de code, consultez notre site [Partage de code](https://community.onespan.com/documentation/onespan-sign/codeshare/creating-layouts-apex-sdk/). Les modèles et les mises en page répondent au même objectif d'automatisation du processus de signature électronique en réduisant le temps nécessaire à l'envoi de documents comprenant plusieurs blocs de signature et champs de données. Les modèles sont idéaux pour une utilisation au niveau de la transaction; vous pouvez prédéfinir vos signataires, vos documents, les emplacements de signature et les flux de travail de signature électronique afin de rationaliser le processus de signature électronique. Une mise en page, quant à elle, est un type de modèle qui vous permet de créer des emplacements prédéfinis pour vos blocs de signature et vos champs de données dans un document. Il agit comme un « marqueur » de l'emplacement des blocs de signature et des champs de données dans le document. Les mises en page sont utiles pour les utilisateurs qui envoient fréquemment des formulaires qui peuvent être légèrement différents selon le destinataire, mais dont les blocs de signature et les champs de données restent au même endroit dans tout le document. De plus, vous pouvez utiliser plusieurs mises en page par document, et les appliquer à des pages individuelles dans votre transaction. ### Trouver vos mises en page dans l'interface utilisateur Lorsque vous modifiez des documents, vous trouverez toutes vos mises en page enregistrées dans la barre d'outils, comme illustré ci-dessous. Notez que les mises en page ne peuvent être appliquées que lorsque les transactions sont au statut Ébauche. ![Capture](https://cdn.document360.io/038f59a7-abd0-4c14-9de7-3434d28b49fd/Images/Documentation/layout_1(5).png?sv=2026-02-06&spr=https&st=2026-11-13T10%3A57%3A10Z&se=2026-11-13T11%3A57%3A10Z&sr=c&sp=r&sig=%2BIZfaFBnyJhLkPmsFbCrEFJdq0BnD4nhCyQXF8a%2FeSc%3D) ### Création d'une nouvelle mise en page Dans cet exemple, l'extraction de documents est utilisée pour extraire les champs et les enregistrer sous forme de modèle. Pour obtenir plus d'informations, consultez [Extraction de documents](/v1/docs/fr/document-extraction). Après avoir créé votre paquetage, utilisez la fonction encapsulée suivante pour créer votre mise en page à partir d'un paquetage existant. ```plaintext public ESignLiveAPIObjects.package_x createLayout(    string packageId,    string documentId,    string layoutName,    TestLayout.Visibility visibility ) ``` Il est important de noter que Layout ID est nécessaire pour appliquer des mises en page aux documents. Le code suivant permet d'effectuer ce qui suit : ```plaintext ESignLiveAPIObjects.package_x createLayout = createLayout(    pkgId,    "Sample_Document_Extraction",    "Layout Created from Apex SDK",    TestLayout.Visibility.ACCOUNT ); String layoutId = createLayout.id; ``` ### Récupération d'une mise en page Le code suivant permet de récupérer une mise en page. ```plaintext // Retrieve all layouts integer totalCount = getLayoutCount(); integer index = 0; System.debug('Total layout count: ' + totalCount); while (index < totalCount) {    List layouts = getLayouts(index, index + 49);        for (ESignLiveAPIObjects.package_x layout : layouts) {        System.debug('Layout name: ' + layout.name + ' with id: ' + layout.id);    }        index += 50; } ``` Comme pour la création de mises en page, utilisez les fonctions encapsulées suivantes pour appliquer une mise en page à votre document. Ce code passera dans votre layout ID, target package ID et la cible Document ID. ```plaintext public void applyLayout(String packageId, String documentId, String layoutId) ``` ### Suppression d'une mise en page Pour supprimer une mise en page, utilisez le code suivant : ```plaintext //delete layout ESignLiveSDK sdk = new ESignLiveSDK(); sdk.deletePackage(layoutId); ``` ### Résultats Après avoir exécuté votre code, vous verrez une liste de toutes vos mises en page sous la barre d'outils. Une fois votre mise en page enregistrée, vous pouvez l'appliquer aux documents suivants.