Extraire des pages d’un PDF
Créez un PDF à partir d’une sélection de pages d’un PDF existant.
Extrayez une ou plusieurs pages d’un PDF vers un nouveau document. Sélectionnez
les pages avec le paramètre pages : si vous
l’omettez, toutes les pages sont extraites, et le résultat les conserve
toujours dans l’ordre du document. L’API est stateless : votre document est
traité dans la région et n’est jamais stocké.
Endpoint
/v1/extract_pagesDisponible dans toutes les régions. Voir Régions et résidence des données pour le routage et la résidence des données.
| Région | URL |
|---|---|
| Global | https://api.pdfblocks.com/v1/extract_pages |
| États-Unis | https://us.api.pdfblocks.com/v1/extract_pages |
| HIPAA États-Unis | https://hipaa.api.pdfblocks.com/v1/extract_pages |
| Union européenne | https://eu.api.pdfblocks.com/v1/extract_pages |
| Royaume-Uni | https://uk.api.pdfblocks.com/v1/extract_pages |
| Canada | https://ca.api.pdfblocks.com/v1/extract_pages |
| Australie | https://au.api.pdfblocks.com/v1/extract_pages |
| Japon | https://jp.api.pdfblocks.com/v1/extract_pages |
| Inde | https://in.api.pdfblocks.com/v1/extract_pages |
| Brésil | https://br.api.pdfblocks.com/v1/extract_pages |
Authentification
Authentifiez chaque requête avec votre clé d’API secrète dans l’en-tête
X-API-Key, en HTTPS. Créez et gérez vos clés depuis le
dashboard. Voir
Authentification pour le détail.
Requête
L’endpoint accepte un corps de requête multipart/form-data.
filefilerequiredLe document PDF d’entrée.
pagesstringLes pages à extraire, écrites sous la forme d’une plage de
pages comme 1..3,5. Si vous l’omettez, toutes les
pages sont extraites. Maximum 1000 caractères.
Sélectionner des pages
Le paramètre pages reçoit une liste, séparée par des virgules, de numéros de
page en base 1 et de plages. Elle est traitée comme un ensemble : l’ordre
et les doublons sont ignorés, et les pages extraites restent toujours dans
l’ordre du document. Pour réorganiser les pages dans un ordre arbitraire,
utilisez plutôt Réorganiser les pages.
| Motif | Sélectionne |
|---|---|
| (omis) | Toutes les pages |
1 |
Uniquement la première page |
1..3,5 |
Les pages 1, 2, 3 et 5 |
2.. |
De la page 2 à la dernière page |
..-2 |
De la première page à l’avant-dernière |
-1 |
La dernière page |
Voir Sélectionner des pages pour la référence complète.
Exemples
Extrayez les pages 1 à 3 et la page 5 vers un nouveau PDF :
curl https://api.pdfblocks.com/v1/extract_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='1..3,5' \
-o extracted.pdf# pip install requests
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/extract_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '1..3,5'},
)
response.raise_for_status()
with open('extracted.pdf', 'wb') as output:
output.write(response.content)// Node.js 18+
import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('pages', '1..3,5');
const response = await fetch('https://api.pdfblocks.com/v1/extract_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('extracted.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/extract_pages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'pages' => '1..3,5',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('extracted.pdf', $pdf);
}# gem install http
require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/extract_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '1..3,5',
})
File.write('extracted.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("pages", "1..3,5")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/extract_pages", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("extracted.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("1..3,5"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/extract_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"extracted.pdf", await response.Content.ReadAsByteArrayAsync());Réponse
En cas de succès, la réponse est 200 OK avec le PDF extrait comme corps :
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 22841La sortie ne contient que les pages sélectionnées, dans l’ordre du document. Écrivez le corps directement dans un fichier, comme le font les exemples ci-dessus ; rien n’est stocké de notre côté.
Erreurs
Les requêtes en échec renvoient un corps application/problem+json. La plus
courante sur cet endpoint est une 400, renvoyée lorsque pages référence une
page absente du document ou que file n’est pas un PDF lisible. L’objet
errors nomme chaque champ :
{
"type": "https://www.pdfblocks.com/docs/api/v1/error/400",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"pages": ["The pages field references a page that does not exist in the document."]
}
}Une X-API-Key absente ou non valide renvoie une 401. Voir
Erreurs pour tous les codes de statut et la forme complète
de la réponse.
Recettes
Variantes courantes. Dépliez-en une pour la voir dans tous les langages.
Extraire une seule page
curl https://api.pdfblocks.com/v1/extract_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='1' \
-o page-1.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/extract_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '1'},
)
response.raise_for_status()
with open('page-1.pdf', 'wb') as output:
output.write(response.content)import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('pages', '1');
const response = await fetch('https://api.pdfblocks.com/v1/extract_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('page-1.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/extract_pages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'pages' => '1',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('page-1.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/extract_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '1',
})
File.write('page-1.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("pages", "1")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/extract_pages", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("page-1.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("1"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/extract_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"page-1.pdf", await response.Content.ReadAsByteArrayAsync());Extraire les trois dernières pages
curl https://api.pdfblocks.com/v1/extract_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='-3..-1' \
-o last-three.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/extract_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '-3..-1'},
)
response.raise_for_status()
with open('last-three.pdf', 'wb') as output:
output.write(response.content)import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('pages', '-3..-1');
const response = await fetch('https://api.pdfblocks.com/v1/extract_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('last-three.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/extract_pages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'pages' => '-3..-1',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('last-three.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/extract_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '-3..-1',
})
File.write('last-three.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("pages", "-3..-1")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/extract_pages", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("last-three.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("-3..-1"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/extract_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"last-three.pdf", await response.Content.ReadAsByteArrayAsync());