Aplatissez les champs PDF en contenu de page statique
Ada (Countess) Lovelace saisi dans un champ de la page 1 et une case cochée en page 2 deviennent du contenu fixe, et le rapport confirme que les deux ont été aplatis. Le formulaire n'a plus de champs actifs modifiables. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Transformez un formulaire PDF interactif rempli en une représentation stable où les valeurs saisies font partie du contenu des pages. Cette capacité reçoit le contenu des pages et les définitions des champs, valide chaque valeur et chaque position, crée des opérations d’apparence statiques et déterministes, supprime la collection interactive et indique précisément les champs aplatis. Elle est conçue pour une automatisation prévisible après l’analyse, le remplissage et l’approbation d’un PDF, avec une erreur explicite lorsque le formulaire fourni ne contient aucun champ.
Ce que l’aplatissement change dans un formulaire rempli
Un PDF rempli peut sembler terminé tout en contenant encore des contrôles modifiables. Les zones de texte, cases à cocher, listes, boutons radio et valeurs visibles de signature peuvent rester séparés des instructions graphiques ordinaires de chaque page. Cette distinction compte lorsque le document passe à la livraison, à l’impression ou à l’archivage : un lecteur peut révéler ou modifier le contrôle, et différents logiciels peuvent rendre son apparence autrement.
Cette capacité reprend les valeurs fournies et écrit une opération d’apparence statique dans le contenu de la page correspondante. L’opération est limitée au rectangle indiqué, emploie un format numérique stable et protège les caractères ayant une signification particulière dans les chaînes PDF. Une fois le traitement achevé, la collection de champs interactifs renvoyée est vide.
Les valeurs visibles accompagnent donc le modèle de contenu sans dépendre de contrôles actifs. La sortie comprend aussi un rapport champ par champ, dans l’ordre reçu, afin que votre processus consigne exactement les modifications.
Préparer correctement les pages et les valeurs
Fournissez au moins une page, identifiée par un numéro positif unique, avec son flux de contenu statique existant représenté sous forme de texte. Ajoutez ensuite chaque champ rempli avec un nom unique, son numéro de page, son type, sa valeur textuelle et les coordonnées de son rectangle en points PDF. Les types acceptés couvrent le texte, les cases à cocher, les boutons radio, les choix et les signatures.
Les valeurs sont des chaînes, car l’aplatissement utilise la valeur affichée : une case cochée peut par exemple contenir « Yes », tandis qu’une liste contient le libellé sélectionné. Chaque champ doit désigner une page existante, avec une largeur et une hauteur supérieures à zéro. Toutes les coordonnées et dimensions doivent être des nombres finis.
La validation est volontairement stricte. Les doublons, types inconnus, géométries invalides, pages absentes ou valeurs non textuelles déclenchent une erreur claire plutôt qu’un résultat partiel. Une liste de champs vide est surtout refusée explicitement, afin qu’une opération sans effet ne paraisse jamais réussie.
Exploiter le rapport dans un flux documentaire fiable
Placez cette transformation après le remplissage et l’approbation humaine ou automatique, mais avant la livraison finale ou la préparation de l’archive. Le résultat contient les pages triées par numéro, leur contenu initial suivi des opérations d’apparence générées, une collection de champs vide, le nombre de champs aplatis et leur rapport détaillé. Chaque entrée conserve le nom, la page, le type et la valeur affichée d’origine.
Comparez le nombre au total attendu par votre processus, ou conservez le rapport avec votre piste d’audit afin de simplifier les recherches ultérieures. Ce déterminisme facilite les tests de référence, les empreintes de contenu, les nouvelles tentatives et les builds reproductibles. La capacité modélise l’étape d’aplatissement sans analyser les octets PDF ; un système binaire doit d’abord analyser les pages et champs AcroForm, puis sérialiser le modèle statique renvoyé.
Cas d’usage
Finaliser une demande approuvée
Intégrez les valeurs du demandeur au contenu des pages après validation et conservez le rapport avec le dossier.
Stabiliser les formulaires avant impression
Supprimez la dépendance aux contrôles interactifs afin que des opérations graphiques déterministes représentent les valeurs.
Questions fréquentes
Quel est le prix de cette capacité ?
L’implémentation dans le navigateur applique la même transformation déterministe.
Que se passe-t-il si le formulaire ne contient aucun champ ?
La requête échoue avec une erreur d’entrée invalide indiquant l’absence de champs. Un formulaire vide n’est jamais déclaré aplati.
Quels types de champs sont pris en charge ?
Le texte, les cases à cocher, les boutons radio, les choix et les signatures sont acceptés. La chaîne fournie devient la valeur affichée.
Cette capacité analyse-t-elle un fichier PDF binaire ?
Non. Elle transforme de façon déterministe le contenu et les valeurs déjà analysés. Un flux binaire analyse avant, puis sérialise après.
Les parenthèses ou autres signes d'un nom abîment-ils la page ?
Non. Les caractères qui ont un sens particulier dans un PDF sont protégés à l'écriture : un nom comme Ada (Countess) Lovelace reste exactement tel qu'il a été saisi. Chaque valeur est en outre limitée au rectangle de son champ et ne déborde pas sur le reste de la page.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/pdf/flatten-form \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/flatten-form", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/flatten-form",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/flatten-form", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/flatten-form", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.flatten_form",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 25 |
max_pages | 200 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Exploiter le rapport dans un flux documentaire fiable
L’algorithme n’utilise ni réseau, ni choix aléatoire, ni horloge, ni état mutable partagé : une même entrée produit donc toujours le même JSON.
Cas d'intégration
Vérifier un flux documentaire automatisé
Comparez flattened_count et flattened_fields au schéma attendu avant sérialisation, livraison ou archivage.
Questions techniques
Le résultat identifie-t-il les champs aplatis ?
Oui. flattened_fields indique le nom, la page, le type et la valeur de chaque champ, tandis que flattened_count donne le total.