Supprimez les pages PDF vides et comptez les pages restantes
Supprimez les pages PDF vides d’un flux documentaire sans deviner quels numéros doivent disparaître.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Fournissez un enregistrement par page, dans l’ordre, puis indiquez si elle contient du texte ou des images. La capacité ne considère une page comme vide que lorsque les deux signaux sont absents, renvoie ses numéros à partir de un et calcule le nombre de pages restant après suppression. Elle convient aux documents déjà analysés après une numérisation, un assemblage ou un export.
Décrivez chaque page dans son ordre d’origine
Partez de l’inventaire produit par votre analyseur, scanner ou chaîne documentaire. Envoyez un tableau pages comportant un enregistrement par page et conservez l’ordre exact. Chaque entrée exige deux booléens : has_text signale le texte et has_images les images. Utilisez true ou false, jamais du texte ni des nombres. La position fixe le numéro : la première entrée représente la page 1. Incluez chaque page afin de ne pas décaler les numéros suivants.
Comprenez la définition d’une page vide
Une page est vide uniquement lorsque has_text et has_images valent false. Du texte ou une image suffit à la conserver. Cette règle prudente protège les scans, signatures, schémas et couvertures. La capacité n’évalue ni espace visuel, ni OCR, ni annotation, ni tracé ; vos indicateurs font foi. La réponse donne des numéros à partir de un ainsi que les totaux initial, supprimé et restant. Si tout est vide, il reste zéro page ; sinon la liste peut être vide.
Appliquez le résultat en toute sécurité
Utilisez blank_pages comme plan de suppression dans la bibliothèque qui gère le véritable PDF. Comme de nombreux outils décalent les index après une suppression, procédez dans l’ordre décroissant ou transmettez toute la sélection d’origine en une fois. Vérifiez remaining_page_count si votre système doit refuser un document sans page. Les totaux facilitent aussi les aperçus et audits. Le calcul est déterministe, sans réseau ni OCR, et coûte $0.002 par appel API.
Cas d’usage
Nettoyez des lots numérisés
Transformez les indicateurs du scanner en liste de suppression avant d’archiver chaque PDF.
Retirez les séparateurs d’export
Repérez les pages vides ajoutées lors de la fusion de rapports et calculez le total final.
Prévisualisez le nettoyage
Montrez les pages qui seront retirées et le total restant avant toute modification.
Questions fréquentes
Quel est le tarif ?
Un appel API coûte $0.002. Le même calcul déterministe est aussi disponible dans le navigateur.
Quand une page est-elle vide ?
Seulement si has_text et has_images valent false. Si l’un vaut true, elle est conservée.
Les numéros commencent-ils à zéro ?
Non. Ils commencent à un : le premier enregistrement correspond à la page 1.
La capacité modifie-t-elle ou renvoie-t-elle un PDF ?
Non. Elle fournit un plan et des totaux ; votre bibliothèque PDF effectue les suppressions.
Que se passe-t-il si toutes les pages sont vides ?
Elles sont toutes listées et remaining_page_count vaut zéro. Votre application décide d’accepter ou non.
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/remove-blank-pages \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"has_text":true,"has_images":false},{"has_text":false,"has_images":false},{"has_text":false,"has_images":true}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/remove-blank-pages", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"has_text": true,
"has_images": false
},
{
"has_text": false,
"has_images": false
},
{
"has_text": false,
"has_images": true
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/remove-blank-pages",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"has_text": true,
"has_images": false
},
{
"has_text": false,
"has_images": false
},
{
"has_text": false,
"has_images": true
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/remove-blank-pages", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"has_text":true,"has_images":false},{"has_text":false,"has_images":false},{"has_text":false,"has_images":true}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"has_text":true,"has_images":false},{"has_text":false,"has_images":false},{"has_text":false,"has_images":true}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/remove-blank-pages", 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": [
{
"has_text": true,
"has_images": false
},
{
"has_text": false,
"has_images": false
},
{
"has_text": false,
"has_images": true
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.remove_blank_pages",
"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. |