Diagnostic de réparation PDF et plan de récupération
Un PDF endommagé produit souvent une liste déroutante de messages sans préciser ce qui peut réellement être réparé.
Lancer gratuitement
Ce diagnostic transforme ces constats structurels en rapport exploitable. Indiquez des problèmes tels qu’une table de références croisées absente, un flux non terminé, une longueur incorrecte ou un fichier tronqué. Chaque élément reçoit une classification cohérente, un niveau de risque, une recommandation et une place dans un plan ordonné. Vous pouvez ainsi décider si une réparation automatisée est raisonnable avant de modifier le fichier original.
Transformez les messages du validateur en décision de réparation
Les validateurs PDF savent nommer les structures défectueuses, mais leur sortie permet rarement de prendre une décision complète. Une table de références croisées absente signale un problème de navigation, tandis qu’une fin de fichier inattendue peut indiquer que des octets ont définitivement disparu. Traiter ces constats de la même manière peut faire perdre du temps ou détruire des indices qu’un spécialiste aurait pu récupérer. Ce diagnostic normalise chaque description fournie et la compare à des familles explicites de défaillances structurelles. Il ne déclare un problème réparable que lorsqu’une méthode de reconstruction circonscrite existe. Il attribue aussi un niveau de risque et explique l’action conseillée. Les descriptions inconnues sont volontairement classées comme non réparables par ce rapport automatisé, car une supposition est dangereuse lorsque les limites d’objets et les références ne sont plus fiables. Ajoutez le numéro d’objet, le décalage en octets, la page ou l’emplacement de la bande-annonce fourni par votre validateur. Ce contexte est repris dans le rapport afin de relier chaque recommandation au constat initial sans consulter un journal distinct.
Comprenez le sens du terme réparable
Une classification réparable signifie que l’enregistrement structurel endommagé peut généralement être reconstruit grâce à des informations encore présentes ailleurs dans le fichier. Les marqueurs d’objets indirects permettent, par exemple, de reconstituer un index de références croisées absent, et la mesure des octets encodés d’un flux permet de corriger une valeur Length erronée. Cela ne signifie pas que chaque page, police, image, annotation ou valeur de formulaire est intacte. Un flux non terminé est réparable avec un risque élevé, car la limite fiable de l’objet suivant peut révéler sa fin, mais des données binaires ambiguës peuvent encore empêcher une correction sûre. À l’inverse, une troncature n’est pas réparable si les octets absents contenaient un contenu unique, et un catalogue absent ne peut être recréé automatiquement, car le choix de la racine exige de comprendre les relations prévues. Les erreurs de chiffrement restent également bloquées jusqu’à l’obtention d’identifiants autorisés. Conservez l’original intact, travaillez sur une copie et examinez ensemble recommandation et risque. Les classifications sont déterministes : une même description produit toujours le même résultat, sans réseau, hasard ni interprétation par modèle de langage.
Appliquez et vérifiez le plan ordonné
Le plan généré ne contient que les éléments jugés réparables et respecte leur ordre de découverte. Il reste ainsi facile à comparer au journal du validateur, même si un outil peut devoir regrouper plusieurs changements liés dans une seule réécriture. Préservez les générations d’objets lorsque cela est possible, ne réutilisez pas les identifiants occupés et actualisez les références indirectes après toute renumérotation. Si la taille des flux ou les décalages d’objets changent, reconstruisez les références croisées après ces modifications, et non avant. Chaque étape demande d’analyser à nouveau la sortie et de confirmer la disparition du constat visé sans nouvelle erreur structurelle. La vérification finale doit employer un analyseur indépendant, car utiliser uniquement la bibliothèque ayant écrit la réparation peut masquer des hypothèses communes. Comparez le nombre de pages et le graphe des objets accessibles à la source, ouvrez visuellement des pages représentatives et contrôlez les fonctions interactives importantes. Une analyse structurelle réussie est nécessaire, mais ne prouve pas que le contenu perdu a été restauré. Si un élément est classé comme non réparable, conservez-le dans le dossier et transmettez-le à un spécialiste au lieu de l’omettre silencieusement.
Cas d’usage
Trier un rapport de validation
Convertissez les constats structurels bruts en liste cohérente de problèmes réparables ou bloqués avant d’attribuer le travail technique.
Planifier une chaîne de récupération
Utilisez les recommandations ordonnées pour choisir les étapes de reconstruction et les contrôles suivant chaque modification.
Documenter une décision de réparation
Joignez classifications, emplacements, risques et recommandations à un incident ou à un dossier de récupération d’archives.
Questions fréquentes
Cette capacité répare-t-elle le PDF lui-même ?
Non. Elle classe une liste de constats structurels et produit un plan ; elle ne reçoit ni ne modifie jamais les octets du PDF.
Que signifie réparable dans le rapport ?
Cela signifie qu’une correction structurelle reconnue peut souvent être déduite des informations restantes, sans garantir la récupération de tout le contenu.
Que devient un message de validation inconnu ?
Il est classé comme problème structurel non reconnu et non réparable automatiquement, avec une recommandation d’examen manuel.
Pourquoi une liste de problèmes vide est-elle refusée ?
Sans constat, le diagnostic ne peut rien classer ni produire de plan utile ; la requête renvoie donc une erreur de saisie incorrecte.
Combien coûte un rapport ?
Chaque requête API coûte $0.002. La capacité fonctionne localement et de manière déterministe, sans modèle externe ni service réseau.
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/repair-report \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"issues":[{"description":"Missing cross-reference table","location":"file trailer"},{"description":"Unterminated stream","location":"object 18"}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/repair-report", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"issues": [
{
"description": "Missing cross-reference table",
"location": "file trailer"
},
{
"description": "Unterminated stream",
"location": "object 18"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/repair-report",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"issues": [
{
"description": "Missing cross-reference table",
"location": "file trailer"
},
{
"description": "Unterminated stream",
"location": "object 18"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/repair-report", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"issues":[{"description":"Missing cross-reference table","location":"file trailer"},{"description":"Unterminated stream","location":"object 18"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"issues":[{"description":"Missing cross-reference table","location":"file trailer"},{"description":"Unterminated stream","location":"object 18"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/repair-report", 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
{
"issues": [
{
"description": "Missing cross-reference table",
"location": "file trailer"
},
{
"description": "Unterminated stream",
"location": "object 18"
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.repair_report",
"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_items | 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. |