Aller au contenu principal

Définition du document

La définition du document est le cœur de DocPayload. C'est un objet JSON qui décrit déclarativement l'intégralité de votre document — mise en page, styles, contenu, en-têtes, pieds de page et bien plus. La même définition s'affiche en PDF, DOCX ou SVG.

Structure racine

{
"document": {
"metadata": { ... },
"pageSetup": { ... },
"styles": { ... },
"fonts": { ... },
"images": { ... },
"header": { ... },
"footer": { ... },
"watermarks": [ ... ],
"content": [ ... ],
"use": [ ... ],
"encryption": { ... },
"signature": { ... },
"attachment": { ... },
"bookmark": { ... },
"diagnostics": { ... }
}
}

Seul content est requis. Les autres clés sont optionnelles — omettez celles que vous ne besoin.

Clés racine

L'API accepte trois clés racine — toutes mappent à la même structure interne :

Clé racineObjectif
"document"Définition complète du document. La clé racine primaire et recommandée.
"component"Un élément réutilisable d'un document (styles + contenu, pas de configuration de page requise). Utilisé pour composition.
"documentDefinition"Alias rétro-compatible pour "document". Fonctionne de manière identique mais "document" est préféré.

Une clé "$schema" optionnelle peut être ajoutée aux côtés de la clé racine pour activer la validation de l'IDE — elle est ignorée par le moteur. Voir Configuration de l'éditeur ci-dessous.

Configuration de l'éditeur

Le schéma JSON est publié à :

https://docpayload.com/docs/schemas/v1/document-definition.schema.json

Faire pointer votre éditeur dessus vous donne l'autocomplétion sur chaque propriété, des conseils d'ensemble de valeurs sur les champs liés à des énumérations (par ex. textAlign, fontWeight, taille de page size), et des traits ondulés rouges sur les fautes de frappe et les discriminateurs inconnus — avant que vous ne rendiez.

Option 1 — mot-clé $schema (par fichier)

Ajoutez une clé $schema au début du document. Tout éditeur conscient du schéma JSON la récupère automatiquement :

{
"$schema": "https://docpayload.com/docs/schemas/v1/document-definition.schema.json",
"document": {
"content": [
{ "p": "Hello." }
]
}
}

Le moteur ignore $schema au moment du rendu, donc c'est sûr de le laisser dans les fichiers de production.

Option 2 — paramètre d'espace de travail VS Code

Associez chaque fichier JSON dans un dossier (ou correspondant à une expression glob) au schéma une fois, dans .vscode/settings.json :

{
"json.schemas": [
{
"fileMatch": ["templates/**/*.json", "documents/**/*.json"],
"url": "https://docpayload.com/docs/schemas/v1/document-definition.schema.json"
}
]
}

Ajustez les expressions glob fileMatch à l'endroit où vous gardez vos sources DocPayload. Pas besoin d'ajouter $schema à chaque fichier avec cette approche.

Option 3 — IDEs JetBrains (IntelliJ, WebStorm, Rider, …)

Paramètres → Langages & Frameworks → Schémas et DTD → Mappages de schémas JSON → +. Définissez l'URL du schéma sur l'URL ci-dessus, puis ajoutez un motif de chemin de fichier correspondant à l'endroit où votre JSON DocPayload se trouve.

Option 4 — Cursor et autres éditeurs conscients du schéma JSON

Le mot-clé $schema (Option 1) est le chemin universel — tout éditeur qui honore le schéma JSON draft-07 le résoudra.

Ce que l'application fait réellement

ErreurDétectée ?
Propriété de style inconnue (fontWieght au lieu de fontWeight)Trait ondulé rouge sur la clé
Discriminateur de contenu inconnu ({ "canvas": { … } } au lieu de { "shapes": [...] })Trait ondulé rouge sur la clé
Type de valeur incorrect (fontSize: "big")Erreur de type
Énumération hors liste (textAlign: "diagonal")Erreur d'énumération avec la liste autorisée
Raccourci de bordure incorrect (borderTop: { width: 1 } au lieu de "1pt solid #000")Erreur de type
Taille de page non dans le catalogue (size: "QUARTO")Erreur d'énumération suggérant LETTER, A4, etc.

Les clés mal cadrées (FontWeight au lieu de fontWeight) peuvent également être ondulées, même si le moteur d'exécution les honore — écrivez avec IntelliSense et vous obtenez la casse canonique gratuitement.

Propriétés

PropriétéTypeRequisDescription
metadataobjectNonTitre, auteur, sujet, mots-clés
pageSetupobjectNonTaille de page, orientation, marges, bordures de page
stylesobjectNonDéfinitions de style nommées réutilisables
fontsobjectNonDéfinitions de famille de polices personnalisées chargées à partir de fichiers de police
imagesobjectNonDictionnaire d'images indexées référencées par nom à partir de Codes courts [image, key] ou de nœuds du corps { "image": "key" }
headerobjectNonEn-tête de page répétitif
footerobjectNonPied de page répétitif avec numérotation des pages
watermarksarrayNonSuperpositions de chromage de page appliquées à chaque page (contenu textuel, image ou forme ; une entrée par couche)
contentarrayOuiTableau d'éléments de contenu
usearrayNonRéférences de composants fusionnées dans le document (utilisées pour composition)
encryptionobjectNonProtection par mot de passe et permissions
signatureobjectNonSignature numérique (PAdES ou CMS détaché)
attachmentobjectNonIntégrez une pièce jointe de fichier dans le PDF
bookmarkobjectNonArborescence des signets / contour du document
diagnosticsobjectNonDiagnostics par rendu — ajoute une annexe de développement listant chaque style, police, image et composant (use) résolu pendant le rendu

Éléments de contenu

Le tableau content accepte les types d'éléments suivants. Chaque élément est un objet portant exactement l'une de ces clés de discriminateur (plus les frères optionnels comme style, colspan, rowspan).

ÉlémentCléDescription
ParagraphepTexte avec formatage en ligne
Titreh1h5Titres sémantiques avec dimensionnement intégré
TableautableLignes et colonnes avec style de cellule, colspan / rowspan
Liste ordonnéeolListe numérotée
Liste non ordonnéeulListe à puces
ColonnescolumnsMise en page multi-colonnes
Règle horizontalehrRègle horizontale avec styles de ligne, alignement, remplissage et espacement
ImageimageÉlément image autonome
Code-barresCodes courts / canevas63 symbologies prise en charge via le Code court [barcode, …] dans le texte, ou en tant que forme barcode dans un tableau de canevas shapes
Champ de formulaireCodes courts7 types de champs interactifs — texte, zone de texte, case à cocher, bouton radio, choix, boîte de liste, sélecteur de date
CanevasshapesPrimitives de dessin alignées sur SVG (ligne, rectangle, cercle, chemin, texte, image…) avec optionnel viewBox et padding
Saut de pagebreakSaut de page page, section, ou line
Table des matièrestocTOC auto-généré à partir des titres h1h5

Les clés de discriminateur inconnues sont rejetées au moment de la validation — les fautes de frappe comme { "canvas": { … } } (l'ancien wrapper, non plus reconnu) ne s'afficheront pas silencieusement vides ; le moteur génère une erreur pour que la faute de frappe soit évidente.

Exemple minimal

Le document valide le plus simple :

{
"document": {
"content": [
{ "h1": "Hello, World!" },
{ "p": "Generated by DocPayload." }
]
}
}