Superposez deux PDF et décrivez chaque page combinée
Superposer deux PDF explique le contenu d'un assemblage page par page avant que vous ne créiez ou vérifiiez le document final.
Lancer gratuitement
Fournissez une description ordonnée de chaque page du PDF de base, puis de chaque page du PDF superposé. Le résultat conserve les correspondances, précise l'ordre des calques et produit une description concise de chaque page combinée. Cet outil est particulièrement adapté au contrôle des modèles de tampon, papiers à en-tête, marques d'approbation et autres éléments graphiques répétés. Si le nombre de pages diffère, la requête est rejetée, car aucune correspondance univoque n'est possible.
Décrivez les deux PDF dans l'ordre des pages
Commencez par deux tableaux contenant du texte extrait ou de brèves descriptions visuelles, à raison d'une chaîne par page de PDF. Le tableau pages_base représente le document inférieur, tandis que pages_overlay correspond au document placé au-dessus. Respectez l'ordre d'origine dans chaque tableau : la première description de base est associée à la première description superposée, la deuxième à la deuxième, et ainsi de suite. Une description peut mentionner du texte, des logos, des tampons, des bordures, des champs de formulaire ou tout autre élément utile à votre contrôle. Utilisez une chaîne vide lorsqu'une véritable page est blanche ; ne supprimez pas son entrée, car toutes les correspondances suivantes seraient décalées. Cette capacité décrit un assemblage prévu ou extrait, mais ne modifie pas les octets du PDF. Elle convient donc aux contrôles de processus, aux journaux d'audit et aux aperçus lisibles lorsqu'un autre système a déjà extrait le contenu ou connaît la conception du modèle. Les deux champs doivent être des tableaux non vides, chaque élément doit être une chaîne et la taille limitée empêche les traitements accidentellement démesurés.
Interprétez le résultat de la superposition
Pour chaque numéro de page, la réponse identifie le calque de base inférieur et le calque superposé supérieur. Cet ordre explicite est important : un tampon, un en-tête ou une annotation du PDF supérieur est conceptuellement dessiné après le document sous-jacent et peut en masquer une partie dans un fichier rendu. Les descriptions simples ne contenant ni coordonnées, ni couleurs, ni transparence, ni polices, ni contours précis des objets, l'outil ne prétend pas détecter les collisions au pixel près. Il fournit plutôt un compte rendu déterministe des éléments décrits qui contribuent à chaque page assemblée. Les pages blanches font l'objet d'un traitement particulier. Si la page superposée est vide, la réponse indique que la base reste dégagée ; si la base est vide, seul le calque supérieur apporte du contenu décrit ; si les deux sont vides, cet état est consigné directement. Les espaces sont normalisés afin que les descriptions copiées depuis des outils d'extraction restent lisibles et stables. Des entrées identiques produisent toujours la même séquence et la même formulation, pour des tests automatisés et des journaux d'approbation fiables.
Repérez les erreurs de pagination avant la production
Une superposition n'a de sens que si chaque page de base possède exactement une page supérieure correspondante. La capacité compare donc la longueur des deux tableaux avant toute description et renvoie une erreur d'entrée non valide lorsqu'elles diffèrent. Ce comportement strict détecte un incident fréquent en production documentaire : un modèle de tampon de deux pages appliqué à un contrat de trois pages, ou une couverture insérée dans un fichier mais pas dans l'autre. Corrigez les documents sources ou ajoutez volontairement la description d'une page blanche afin d'aligner leurs structures, puis relancez la requête. La réponse comprend le nombre de pages vérifié, l'ordre général du bas vers le haut et un enregistrement numéroté pour chaque paire. Vous pouvez ainsi le comparer à une fiche de travail ou l'intégrer à une interface de contrôle. L'automatisation par API coûte $0.002 par requête. Le traitement étant local, déterministe et sans réseau ni modèle, les descriptions sensibles ne sont pas transmises à un prestataire d'analyse externe et la formulation reste stable entre deux exécutions identiques.
Cas d’usage
Contrôlez un tampon d'approbation
Vérifiez que chaque page du contrat correspond à la description prévue du tampon d'approbation ou de révision.
Vérifiez les modèles de papier à en-tête
Décrivez comment l'en-tête, le pied de page ou les bordures propres à chaque page se placent sur le contenu existant.
Validez l'assemblage documentaire
Détectez une page de modèle manquante ou superflue avant qu'un moteur en aval combine les PDF de production.
Questions fréquentes
Cet outil crée-t-il un nouveau PDF ?
Non. Il renvoie une description structurée de l'assemblage page par page ; il ne modifie ni ne rend les octets du PDF.
Quel PDF se trouve au-dessus ?
pages_overlay est le calque supérieur et pages_base le calque inférieur.
Que se passe-t-il si les nombres de pages diffèrent ?
La requête échoue avec une erreur d'entrée non valide qui indique les deux nombres.
Comment représenter une page blanche ?
Conservez sa position dans le tableau et utilisez une chaîne vide afin que les pages suivantes restent correctement associées.
L'outil peut-il détecter si un tampon cache certains mots ?
Non. Les descriptions textuelles ne donnent ni géométrie ni transparence ; le résultat décrit les calques, pas l'occlusion au pixel près.
Quel est le tarif ?
Chaque requête API coûte $0.002.
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/overlay-two-files \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages_base":["Invoice 1042: customer, line items, and total due","Payment terms and bank details"],"pages_overlay":["APPROVED stamp centered across the page","APPROVED stamp centered across the page"]}'const res = await fetch("https://api.kit.forhosting.com/pdf/overlay-two-files", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages_base": [
"Invoice 1042: customer, line items, and total due",
"Payment terms and bank details"
],
"pages_overlay": [
"APPROVED stamp centered across the page",
"APPROVED stamp centered across the page"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/overlay-two-files",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages_base": [
"Invoice 1042: customer, line items, and total due",
"Payment terms and bank details"
],
"pages_overlay": [
"APPROVED stamp centered across the page",
"APPROVED stamp centered across the page"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/overlay-two-files", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages_base":["Invoice 1042: customer, line items, and total due","Payment terms and bank details"],"pages_overlay":["APPROVED stamp centered across the page","APPROVED stamp centered across the page"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages_base":["Invoice 1042: customer, line items, and total due","Payment terms and bank details"],"pages_overlay":["APPROVED stamp centered across the page","APPROVED stamp centered across the page"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/overlay-two-files", 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_base": [
"Invoice 1042: customer, line items, and total due",
"Payment terms and bank details"
],
"pages_overlay": [
"APPROVED stamp centered across the page",
"APPROVED stamp centered across the page"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.overlay_two_files",
"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. |