Αποστολή Αρχείου ως Πρότυπο
Αυτός ο οδηγός σε καθοδηγεί σε όλη τη διαδικασία δημιουργίας προτύπου και ανέβασμα ενός αρχείου PDF, εικόνας ή Word για χρήση ως πρότυπο εγγράφου στο Legalesign.
Τι Θα Μάθετε
Στο τέλος αυτού του οδηγού, θα ξέρετε πώς να:
- Δημιουργήσετε ένα νέο πρότυπο στην ομάδα σας στο Legalesign
- Πάρτε το ID προτύπου και το URL ανέβασματος από την απάντηση της μετάλλαξης
- Ανεβάσετε το αρχείο πηγής σας στο πρότυπο
- Επιβεβαιώσετε ότι το ανέβασμα ολοκληρώθηκε με επιτυχία
Προϋποθέσεις
Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε:
- Έναν λογαριασμό Legalesign με πρόσβαση στο API
- Τα διαπιστευτήρια ταυτοποίησής σας (δείτε τον οδηγό ταυτοποίησης)
- Ένα αρχείο PDF, εικόνας ή Word έτοιμο για ανέβασμα (μέγιστο 50MB)
- Το ID της ομάδας σας (τον χώρο εργασίας όπου θέλετε να δημιουργήσετε το πρότυπο)
Η Πλήρης Διαδικασία
Βήμα 1: Δημιουργία Προτύπου
Πρώτα, δημιουργήστε ένα κενό πρότυπο στο Legalesign. Αυτό επιστρέφει τόσο το ID προτύπου όσο και ένα προ-υπογεγραμμένο URL ανέβασματος για το ανέβασμα του PDF. Για να το κάνετε αυτό θα χρειαστεί να εκτελέσετε μία GraphQL μετάλλαξη, αν δεν το έχετε κάνει ξανά δείτε το Εισαγωγή στο GraphQL.
Τι είναι ένα Πρότυπο;
Ένα πρότυπο είναι μια επαναχρησιμοποιήσιμη δομή εγγράφου στο Legalesign. Αφού ανεβάσετε ένα PDF σε ένα πρότυπο, μπορείτε να:
- Προσθέσετε πεδία υπογραφής και πεδία φόρμας
- Το στείλετε σε πολλούς παραλήπτες
- Το ξαναχρησιμοποιήσετε για διαφορετικούς υπογράφοντες
GraphQL Μετάλλαξη
mutation CreateTemplate($input: templateCreateInput!) {
createTemplate(input: $input) {
id
uploadUrl
}
}
Μεταβλητές Εισόδου
{
"input": {
"groupId": "grpYourGroupAPIId",
"title": "Employment Contract Template"
}
}
Επεξήγηση Παραμέτρων
- groupId: Το κωδικοποιημένο σε base 64 ID της ομάδας/χώρου εργασίας σας (μπορείτε να το βρείτε από το URL στο Console https://console.legalesign.com/)
- title: Ένα περιγραφικό όνομα για το πρότυπό σας (μπορείτε να το αλλάξετε αργότερα)
Βήμα 2: Εξαγωγή του ID Προτύπου και του URL Ανέβασματος
Η μετάλλαξη επιστρέφει ένα αντικείμενο templateCreateOutput. Αποθηκεύστε το πεδίο id και το string uploadUrl.
Παράδειγμα απάντησης:
{
"data": {
"createTemplate": {
"id": "dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx",
"uploadUrl": "https://s3.amazonaws.com/bucket/path?signature=..."
}
}
}
Το ID του προτύπου είναι μια συμβολοσειρά κωδικοποιημένη σε Base64. Αποθηκεύστε και τις δύο τιμές από την απάντηση. Το uploadUrl έχει σύντομη διάρκεια ζωής και θα πρέπει να χρησιμοποιηθεί άμεσα.
Βήμα 3: Ανεβάστε το PDF σας
Χρησιμοποιήστε το επιστρεφόμενο uploadUrl για να ανεβάσετε το αρχείο PDF απευθείας στο S3. Αυτό θα διαφέρει ανάλογα με το stack ανάπτυξής σας. Στο παράδειγμα μας με javascript έχουμε χρησιμοποιήσει το fetch αλλά μπορείτε να χρησιμοποιήσετε και άλλες βιβλιοθήκες όπως το aws-amplify.
Πλήρη Παραδείγματα Λειτουργίας
- JavaScript
- Python
- C#
import fs from 'fs';
const AUTH_TOKEN = '<token-from-authentication-guide>';
const uploadPdfTemplate = async (groupId, title, pdfFilePath) => {
const graphqlEndpoint = 'https://graphql.uk.legalesign.com/graphql';
// Step 1: Create the template
console.log('Creating template...');
const createResponse = await fetch(graphqlEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${AUTH_TOKEN}`
},
body: JSON.stringify({
query: `
mutation CreateTemplate($input: templateCreateInput!) {
createTemplate(input: $input) {
id
uploadUrl
}
}
`,
variables: {
input: {
groupId: groupId,
title: title
}
}
})
});
const createResult = await createResponse.json();
const templateId = createResult.data.createTemplate.id;
const uploadUrl = createResult.data.createTemplate.uploadUrl;
console.log('Template created with ID:', templateId);
// Step 2: Upload the PDF
console.log('Uploading PDF...');
const fileData = fs.readFileSync(pdfFilePath);
const uploadResponse = await fetch(uploadUrl, {
method: 'PUT',
body: fileData,
headers: {
'Content-Type': 'application/pdf'
}
});
if (!uploadResponse.ok) {
throw new Error(`Upload failed: ${uploadResponse.statusText}`);
}
console.log('PDF uploaded successfully!');
return {
success: true,
templateId: templateId,
title: title
};
};
// Usage example
uploadPdfTemplate(
'grpYourGroupId',
'Employment Contract',
'./contract.pdf'
).then(result => {
console.log('Complete!', result);
}).catch(error => {
console.error('Error:', error);
});
Δεν απαιτούνται επιπλέον εξαρτήσεις — το Node.js 18+ συμπεριλαμβάνει το fetch εγγενώς.
import requests
from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
def upload_pdf_template(graphql_endpoint, auth_token, group_id, title, pdf_file_path):
transport = RequestsHTTPTransport(
url=graphql_endpoint,
headers={'Authorization': auth_token}
)
client = Client(transport=transport, fetch_schema_from_transport=True)
# Step 1: Create the template
print('Creating template...')
create_mutation = gql('''
mutation CreateTemplate($input: templateCreateInput!) {
createTemplate(input: $input) {
id
uploadUrl
}
}
''')
create_result = client.execute(
create_mutation,
variable_values={
'input': {
'groupId': group_id,
'title': title
}
}
)
template_id = create_result['createTemplate']['id']
upload_url = create_result['createTemplate']['uploadUrl']
print(f'Template created with ID: {template_id}')
# Step 2: Upload the PDF
print('Uploading PDF...')
with open(pdf_file_path, 'rb') as f:
file_data = f.read()
response = requests.put(
upload_url,
data=file_data,
headers={'Content-Type': 'application/pdf'}
)
if response.status_code != 200:
raise Exception(f'Upload failed: {response.status_code}')
print('PDF uploaded successfully!')
return {
'success': True,
'templateId': template_id,
'title': title
}
if __name__ == '__main__':
result = upload_pdf_template(
'https://graphql.uk.legalesign.com/graphql',
'Bearer YOUR_TOKEN',
'grpYourGroupId',
'Employment Contract',
'./contract.pdf'
)
print('Complete!', result)
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using GraphQL;
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using Newtonsoft.Json.Linq;
public class PdfTemplateUploader
{
private readonly GraphQLHttpClient graphQLClient;
public PdfTemplateUploader(string graphqlEndpoint, string authToken)
{
graphQLClient = new GraphQLHttpClient(graphqlEndpoint, new NewtonsoftJsonSerializer());
graphQLClient.HttpClient.DefaultRequestHeaders.Add("Authorization", authToken);
}
public async Task<UploadResult> UploadPdfTemplate(
string groupId,
string title,
string pdfFilePath)
{
// Step 1: Create the template
Console.WriteLine("Creating template...");
var createMutation = new GraphQLRequest
{
Query = @"
mutation CreateTemplate($input: templateCreateInput!) {
createTemplate(input: $input) {
id
uploadUrl
}
}
",
Variables = new
{
input = new
{
groupId = groupId,
title = title
}
}
};
var createResponse = await graphQLClient.SendMutationAsync<dynamic>(createMutation);
string templateId = createResponse.Data.createTemplate.id;
string uploadUrl = createResponse.Data.createTemplate.uploadUrl;
Console.WriteLine($"Template created with ID: {templateId}");
// Step 2: Upload the PDF
Console.WriteLine("Uploading PDF...");
using var httpClient = new HttpClient();
var fileBytes = await File.ReadAllBytesAsync(pdfFilePath);
var content = new ByteArrayContent(fileBytes);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
var putResponse = await httpClient.PutAsync(uploadUrl, content);
if (!putResponse.IsSuccessStatusCode)
{
throw new Exception($"Upload failed: {putResponse.StatusCode}");
}
Console.WriteLine("PDF uploaded successfully!");
return new UploadResult
{
Success = true,
TemplateId = templateId,
Title = title
};
}
}
public class UploadResult
{
public bool Success { get; set; }
public string TemplateId { get; set; }
public string Title { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var uploader = new PdfTemplateUploader(
"https://graphql.uk.legalesign.com/graphql",
"Bearer YOUR_TOKEN"
);
var result = await uploader.UploadPdfTemplate(
"grpYourGroupId",
"Employment Contract",
"./contract.pdf"
);
Console.WriteLine($"Complete! Template ID: {result.TemplateId}");
}
}
Τι Συμβαίνει Μετά το Ανέβασμα;
Μόλις το PDF σας ανέβει, το Legalesign αυτόματα:
- Σαρώνει για ιούς - Διασφαλίζει ότι το αρχείο είναι ασφαλές
- Επικυρώνει ή μετατρέπει το αρχείο - Ελέγχει αν τα PDFs είναι έγκυρα ή μετατρέπει υποστηριζόμενα αρχεία όπως έγγραφα Word και εικόνες σε PDF
- Εξάγει πληροφορίες σελίδων - Λαμβάνει τον αριθμό σελίδων και τις διαστάσεις
- Επεξεργάζεται το αρχείο - Το βελτιστοποιεί για προβολή και υπογραφή
- Αποθηκεύει με ασφάλεια - Μεταφέρει το στο μόνιμο αποθηκευτικό χώρο
Η διαδικασία αυτή συνήθως διαρκεί λίγα δευτερόλεπτα. Μόλις ολοκληρωθεί, το πρότυπό σας είναι έτοιμο για χρήση!
Παρακολούθηση Προόδου Ανέβασματος
Για να λάβετε feedback σε πραγματικό χρόνο σχετικά με την επεξεργασία του ανέβασματος (σάρωση, επικύρωση, ολοκλήρωση), χρησιμοποιήστε συνδρομές. Δείτε Παρακολούθηση Προόδου Ανέβασματος με Συνδρομές.
Εναλλακτικά, κάνετε poll στο πεδίο fileUploaded του προτύπου μέχρι να επιστραφεί true:
query CheckUploadStatus($id: ID!) {
template(id: $id) {
id
fileUploaded
}
}
Προσθήκη Υπογραφών και Πεδίων
Αν θέλετε να αυτοματοποιήσετε τους συμμετέχοντες και τη θέση των πεδίων, μπορείτε να προετοιμάσετε το αρχείο πηγής πριν το ανέβασμα με μερικούς διαφορετικούς τρόπους:
- Ετικέτες κειμένου - Προσθέστε ετικέτες κειμένου Legalesign στο έγγραφο πηγής έτσι ώστε οι συμμετέχοντες, τα πεδία υπογραφής και τα πεδία φόρμας να δημιουργούνται αυτόματα κατά την επεξεργασία. Δείτε την επεξήγηση του REST API στο οδηγό γρήγορης εκκίνησης και την αναφορά στο endpoint Μετατροπή ετικετών κειμένου.
- Ενσωματωμένα πεδία PDF - Αν το PDF σας ήδη περιέχει ενσωματωμένα πεδία φόρμας, το Legalesign μπορεί να τα χρησιμοποιήσει ως μέρος της διαδικασίας ανέβασματος και προετοιμασίας του προτύπου.
Επόμενα Βήματα
Τώρα που έχετε ένα πρότυπο με PDF, μπορείτε να:
- Προσθέσετε πεδία υπογραφής - Χρησιμοποιήστε τη μετάλλαξη
createTemplateElementγια να προσθέσετε πεδία - Δημιουργήσετε ρόλους - Ορίστε ποιος θα υπογράψει το έγγραφο
- Αποστείλετε για υπογραφή - Χρησιμοποιήστε τη μετάλλαξη
sendγια να στείλετε στους παραλήπτες
Συνήθη Προβλήματα και Λύσεις
Σφάλμα "No permission"
Επιβεβαιώστε ότι το group ID είναι σωστό και ότι έχετε ταυτοποιηθεί με τον σωστό λογαριασμό.
Σφάλμα "File too large"
Συμπιέστε το PDF σας — το μέγιστο μέγεθος είναι 50MB.
Η Διεύθυνση URL Ανέβασματος έχει Λήξει
Χρησιμοποιήστε το uploadUrl που επιστράφηκε από το createTemplate άμεσα. Αν λήξει πριν το ανεβάσετε, ζητήστε νέο URL με το ερώτημα upload χρησιμοποιώντας το αποθηκευμένο ID προτύπου.
Σφάλμα "Invalid PDF"
Ανοίξτε το PDF σε αναγνώστη PDF για να επιβεβαιώσετε ότι είναι έγκυρο, στη συνέχεια επανεξάγετε ή επανα-αποθηκεύστε το.