Vai al contenuto principale

Integra il Visualizzatore di Documenti Legalesign nel Tuo Sito Web

suggerimento

Puoi vedere questo componente in azione come Invio Rapido in Console.

Il Visualizzatore di Documenti Legalesign è un componente web indipendente dalla piattaforma che ti permette di modificare, visualizzare in anteprima e personalizzare modelli per la firma di documenti. Funziona perfettamente in HTML con JavaScript, React, Vue, Angular o qualsiasi framework web.

Questo componente plug and play è progettato affinché tu possa integrare parti chiave della creazione di documenti nei tuoi sistemi interni, come un CRM o un'applicazione di business.

Finché il tuo sistema può renderizzare e supportare componenti HTML, puoi usare il Visualizzatore di Documenti.

Se hai bisogno di ulteriore aiuto per integrare il Visualizzatore di Documenti nel tuo stack tecnico, ti preghiamo di contattare il nostro supporto.

Puoi usare questi widget più grandi con integrazioni REST/GraphQL API per fornire processi di firma di documenti fluidi per il tuo staff e clienti.

Installazione

Installazione NPM

npm install legalesign-document-viewer
# or
pnpm add legalesign-document-viewer

Per Progetti React

npm install legalesign-document-viewer-react
# or
pnpm add legalesign-document-viewer-react

Integrazione Base

HTML/JavaScript

La versione HTML/JavaScript di questo componente può essere usata con qualsiasi stack di sviluppo, come PHP, ASP .Net ecc. Puoi collegarti al componente direttamente da npm se il tuo ambiente non consente di installarlo. Puoi provare una pagina di dimostrazione dal repository di esempio qui [https://github.com/legalesign/ls-viewer-demo].

Aggiungi gli script del componente al tuo HTML:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="node_modules/legalesign-document-viewer/dist/ls-document-viewer/ls-document-viewer.css" />
<script type="module" src="node_modules/legalesign-document-viewer/dist/ls-document-viewer/ls-document-viewer.esm.js"></script>
<script nomodule src="node_modules/legalesign-document-viewer/dist/ls-document-viewer/ls-document-viewer.js"></script>
</head>
<body>
<ls-document-viewer
id="my-editor"
templateid="YOUR_TEMPLATE_ID"
token="YOUR_AUTH_TOKEN"
></ls-document-viewer>
</body>
</html>

Autenticazione - Ottieni un token

Dovrai usare codice lato server per ottenere YOUR_AUTH_TOKEN. Ci sono tre opzioni:

  1. SRP JWT direttamente — Se il tuo backend usa già l'autenticazione SRP, passa direttamente il token di accesso JWT al widget.
  2. GraphQL generateComponentToken — Chiama la mutation con la tua API key o SRP JWT per generare un token componente a breve durata e limitato.
  3. REST API — Chiama GET /templatepdf/{pdfId}/component-token/ con la tua API key.

Opzione 2 (GraphQL):

const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.LEGALESIGN_API_KEY}`,
},
body: JSON.stringify({
query: `mutation {
generateComponentToken(input: { component: LS_DOCUMENT_VIEWER }) {
token
expiresIn
expiresAt
}
}`,
}),
});

const { data } = await response.json();
const token = data.generateComponentToken.token;

Opzione 3 (REST):

const response = await fetch(
`https://eu-api.legalesign.com/api/v1/templatepdf/${pdfId}/component-token/`,
{
headers: {
Authorization: `Bearer ${process.env.LEGALESIGN_API_KEY}`,
},
}
);

const { token } = await response.json();

Passa il token restituito (o il tuo SRP JWT) al widget. Vedi Autorizzazione Widget per maggiori dettagli sulle opzioni di token.

Integrazione React

Abbiamo anche generato una versione del componente che si integra direttamente con i framework React.

import { LsDocumentViewer } from 'legalesign-document-viewer-react';

function App() {
return (
<LsDocumentViewer
templateid="YOUR_TEMPLATE_ID"
token="YOUR_AUTH_TOKEN"
mode="compose"
/>
);
}

Attributi Richiesti

token

Il tuo token di sicurezza per l'autenticazione. Può essere un token di accesso SRP JWT oppure un token componente a breve durata generato da generateComponentToken. Vedi Autorizzazione Widget per il flusso sicuro del token.

token="eyJraWQiOiJBTkJIeT..."

templateid

L'ID API del modello che vuoi presentare agli utenti. Lo puoi trovare guardando nell'URL mentre modifichi il modello nell'App Web.

templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"

Modalità del Widget

Modalità Editor

Creazione e modifica completa del modello con tutti gli strumenti disponibili. Questa modalità è pensata per flussi di lavoro dove è utile un modello altamente riutilizzabile con ruoli. Se la tua intenzione è usare il documento una sola volta (forse il tuo sistema di generazione documenti ha già popolato tutte le informazioni del cliente) potresti considerare invece la modalità compose.

<ls-document-viewer mode="editor" ...></ls-document-viewer>

Modalità Compose

Questa modalità è un metodo "recipient-first" per semplificare l'esperienza utente. Nell'App Web Legalesign è la funzione "Invio rapido".

Aggiungi i tuoi destinatari all'attributo 'recipient' e il tuo utente potrà rapidamente posizionare le firme e campi modulo, prima di inviare. Ideale per clienti integrati i cui destinatari sono già definiti.

Il flusso tipico è clonare o caricare un PDF, quindi incorporare il visualizzatore dove l'utente può aggiungere campi firma e modulo, quindi offrire un pulsante per inviare il documento.

Clona

Clona un modello esistente usando la mutation copyTemplate:

const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: `
mutation CopyTemplate {
copyTemplate(input: {
groupId: "yourGroupId",
templateId: "yourTemplateId",
newTitle: "new document title",
copyFields: true|false
})
}
`
})
});
const { data } = await response.json();
const templateId = data.copyTemplate;

Oppure Carica

Crea un modello e caricalo poi nel uploadUrl fornito. Usa titolo [deleted] se non vuoi che il pdf rimanga nella tua libreria. Verrà cancellato entro 24 ore. Altrimenti usa un qualsiasi titolo a tua scelta:

const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: `
mutation CreateTemplate {
createTemplate(input: {groupId: "yourGroupid", title: "[deleted]"}) {
id
uploadUrl
}
}
`
})
});
const { data } = await response.json();
const templateId = data.createTemplate.id;
const uploadUrl = data.createTemplate.uploadUrl;

Ora fai un PUT del tuo file nell'uploadUrl. Il content type deve essere application/pdf.

Incorpora il visualizzatore

L'attributo principale è 'recipients'. Ti serviranno dettagli aggiuntivi per approvatori o testimoni - per maggiori informazioni vedi Destinatari.

<ls-document-viewer 
mode="compose"
recipients='[
{"email": "user@example.com", "firstname": "John", "lastname": "Doe", "signerIndex": 1},
{"email": "user2@example.com", "firstname": "Jane", "lastname": "Smith", "signerIndex": 2}
]'
...></ls-document-viewer>

La modalità compose automaticamente:

  • Rileva i destinatari pre-generati
  • Nasconde il mittente nel dropdown
  • Nasconde le opzioni del documento
  • Mostra i campi richiesti di default
  • Rimuove mittente e campi mittente dall'editor
  • Favorisce la selezione rapida dei campi richiesti per ogni destinatario

Modalità Anteprima

Una utile anteprima del documento che mostra il documento con tutti i campi correnti e consente all'utente di sfogliare le pagine.

<ls-document-viewer mode="preview" ...></ls-document-viewer>

La modalità anteprima automaticamente:

  • Nasconde la toolbar
  • Nasconde le opzioni del documento
  • Nasconde la toolbox
  • Rende partecipanti e campi in sola lettura

Configurazione Avanzata

Filtra Toolbox

Restringi i tipi di campo disponibili usando valori separati da pipe. Se non viene fornito alcun valore, si assume che la toolbox sarà non filtrata e tutte le opzioni disponibili.

<ls-document-viewer
filtertoolbox="signature|initials|date|text"
...
></ls-document-viewer>

Valori di filtro disponibili:

ValoreDescrizione
signatureCampo firma (solo firmatario)
auto signCampo firma automatica (solo mittente)
textCampo testo libero
signing dateData compilata automaticamente al momento della firma (solo firmatario)
dateCampo selettore data
emailCampo email
initialsCampo iniziali
numberCampo numerico
dropdownCampo menu a tendina
checkboxCheckbox
regexCampo con validazione regex (solo firmatario)
imageUpload immagine (solo firmatario)
fileUpload file (solo firmatario)
drawnCampo disegnato/libera mano (solo firmatario)

Destinatari

Definisci i destinatari del documento in formato JSON.

Gli elementi richiesti per ogni destinatario sono firstname, lastname, email e signerIndex;

Opzionalmente puoi passare il ruolo e il numero di telefono per ogni destinatario. L'omissione del ruolo significa che il destinatario sarà trattato come firmatario.

Puoi passare ruolo "WITNESS" o "APPROVER". Per il ruolo "WITNESS" aggiungi 100 al signerIndex del firmatario. Per esempio, se hai bisogno di un testimone per il firmatario 2 (signerIndex: 2), il WITNESS avrà signerIndex: 102.

<ls-document-viewer
recipients='[
{"email": "user@example.com", "firstname": "John", "lastname": "Doe", "signerIndex": 1},
{"email": "user2@example.com", "firstname": "Jane", "lastname": "Smith", "signerIndex": 2}
{"email": "user3@example.com", "firstname": "Joan", "lastname": "Mitchell", "signerIndex": 102, roleType: "WITNESS"}
]'
...
></ls-document-viewer>

Pulsanti Personalizzati con Slot

Aggiungi pulsanti personalizzati alla toolbar usando gli slot. Probabilmente li userai per annullare l'azione o inviare il documento.

<ls-document-viewer ...>
<style>
.custom-button {
padding: 2px 12px;
border-radius: 1rem;
background-color: #9df5d4;
color: #125241;
font-weight: 500;
}
</style>
<span slot="left-button">
<button class="custom-button">Cancel</button>
</span>
<span slot="right-button">
<button class="custom-button">Send Document</button>
</span>
</ls-document-viewer>

Gestione Eventi

Ascolta gli eventi del componente per monitorare i cambiamenti:

const editor = document.querySelector('ls-document-viewer');

editor.addEventListener('update', (event) => {
console.log('Template changed:', event.detail);
});

Puoi rilevare se un modello è diventato valido o non valido usando l'evento validate.

const editor = document.querySelector('ls-document-viewer');

editor.addEventListener('validate', (event) => {
console.log('Template validation changed:', event.detail.valid);
});

Esempio di Gestione Eventi in React

Usando un evento in React lo si premette con il familiare on<EventName>.

<LsDocumentViewer
onUpdate={(event) => {
console.log('Template changed:', event.detail);
}}
...
/>

Tipi di Eventi

Evento update

Scatenato quando il modello documentale viene modificato, ad esempio aggiungendo o rimuovendo campi. Fornisce non solo l'evento che l'ha causato ma anche lo stato aggiornato dell'oggetto modello in JSON.

Evento validate

Scatenato quando il modello documentale viene modificato, la proprietà valid nel dettaglio mostra se il modello è diventato valido o non valido.

Evento selectFields

Scatenato quando un campo viene selezionato nell'editor.

Evento addParticipant

Scatenato quando un ruolo partecipante viene aggiunto al modello.

Esempio Completo

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document Editor</title>
<link rel="stylesheet" href="https://unpkg.com/legalesign-document-viewer/ls-document-viewer.css" />
<script type="module" src="https://unpkg.com/legalesign-document-viewer"></script>
</head>
<body style="padding: 0; margin: 0">
<ls-document-viewer
id="my-editor"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_TOKEN_HERE"
mode="compose"
recipients='[
{"email": "signer@example.com", "firstname": "John", "lastname": "Doe", "signerIndex": 1}
]'
filtertoolbox="signature|initials|date"
>
<span slot="left-button">
<button onclick="handleCancel()">Cancel</button>
</span>
<span slot="right-button">
<button onclick="handleSend()">Send</button>
</span>
</ls-document-viewer>

<script>
const editor = document.querySelector('ls-document-viewer');

editor.addEventListener('update', (event) => {
// shows the change event and the template details
console.log('Document updated:', event.detail);
});

function handleCancel() {
// Implement the cancel logic, e.g. go to a home page
window.location.href = '/cancelpage';
}

function handleSend() {
// Implement send logic if required.
console.log('Sending document...');
}
</script>
</body>
</html>

Puoi usare la mutation send GraphQL lato client se usi il token SRP JWT, altrimenti lato server usando la tua API Key con l'interfaccia GraphQL o REST.

Risoluzione dei Problemi

Se incontri problemi con il componente, assicurati che:

Supporto Browser

Il componente usa standard web moderni e supporta:

  • Chrome/Edge (ultime versioni)
  • Firefox (ultime versioni)
  • Safari (ultime versioni)
  • Browser mobili (iOS Safari, Chrome Mobile)

Risorse

Ottenere Aiuto

Per supporto tecnico o domande sull’integrazione, contatta il team di supporto Legalesign o visita la documentazione API.