Réorganiser les pages d’un PDF
Réorganisez les pages d’un PDF dans l’ordre exact que vous indiquez : une répétition duplique une page, une omission la supprime.
Réorganisez les pages d’un PDF dans l’ordre de votre choix avec le paramètre
page_order. Comme page_order utilise
la syntaxe de pages ordonnée, cette action fait
aussi office d’extraction et de réorganisation combinées : les pages omises sont
supprimées et une page listée deux fois est répétée. L’API est stateless :
votre document est traité dans la région et n’est jamais stocké.
Endpoint
/v1/reorder_pagesDisponible dans toutes les régions. Consultez 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/reorder_pages |
| États-Unis | https://us.api.pdfblocks.com/v1/reorder_pages |
| HIPAA États-Unis | https://hipaa.api.pdfblocks.com/v1/reorder_pages |
| Union européenne | https://eu.api.pdfblocks.com/v1/reorder_pages |
| Royaume-Uni | https://uk.api.pdfblocks.com/v1/reorder_pages |
| Canada | https://ca.api.pdfblocks.com/v1/reorder_pages |
| Australie | https://au.api.pdfblocks.com/v1/reorder_pages |
| Japon | https://jp.api.pdfblocks.com/v1/reorder_pages |
| Inde | https://in.api.pdfblocks.com/v1/reorder_pages |
| Brésil | https://br.api.pdfblocks.com/v1/reorder_pages |
Authentification
Authentifiez chaque requête avec votre clé d’API secrète dans l’en-tête
X-API-Key, via HTTPS. Créez et gérez vos clés depuis le
dashboard. Consultez
Authentification pour plus de détails.
Requête
L’endpoint accepte un corps de requête multipart/form-data.
filefilerequiredLe document PDF d’entrée.
page_orderstringrequiredL’ordre de pages souhaité, écrit dans la syntaxe de pages
ordonnée, par exemple 3,1,2. Les pages omises sont
supprimées et une page listée plusieurs fois est répétée. Maximum
1000 caractères.
Ordre des pages
page_order est lu comme une liste ordonnée, pas comme un ensemble : les
pages sortent exactement telles qu’elles sont listées. Une page nommée deux fois
est émise deux fois, et toute page que vous omettez est supprimée. Une plage
peut même aller à rebours : 10..5 va de la page 10 à la page 5.
Les numéros commencent à 1, et un index négatif compte depuis la fin : -1 est
donc la dernière page.
page_order |
Produit |
|---|---|
3,1,2 |
Les pages 3, 1, puis 2 |
2.. |
De la page 2 à la dernière, dans l’ordre |
-1,1..-2 |
La dernière page, puis toutes celles qui la précèdent |
1,1,2.. |
La page 1 deux fois, puis de la page 2 à la fin |
10..5 |
De la page 10 à la page 5, en ordre inverse |
Consultez Sélectionner des pages pour la référence
complète, et notamment la différence entre le page_order ordonné et le champ
pages, qui repose sur un ensemble.
Exemples
Placez la page 3 en premier, puis les pages 1 et 2 :
curl https://api.pdfblocks.com/v1/reorder_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F page_order='3,1,2' \
-o reordered.pdf# pip install requests
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/reorder_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'page_order': '3,1,2'},
)
response.raise_for_status()
with open('reordered.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('page_order', '3,1,2');
const response = await fetch('https://api.pdfblocks.com/v1/reorder_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('reordered.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/reorder_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'),
'page_order' => '3,1,2',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('reordered.pdf', $pdf);
}# gem install http
require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/reorder_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
page_order: '3,1,2',
})
File.write('reordered.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("page_order", "3,1,2")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/reorder_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("reordered.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,2"), "page_order" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/reorder_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"reordered.pdf", await response.Content.ReadAsByteArrayAsync());Réponse
En cas de succès, la réponse est 200 OK et le PDF réorganisé constitue le
corps :
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 39184É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. L’erreur la
plus fréquente sur cet endpoint est un 400, renvoyé lorsque page_order est
mal formé ou désigne une page absente du document : l’objet errors identifie
le champ concerné :
{
"type": "https://www.pdfblocks.com/docs/api/v1/error/400",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"page_order": ["The page_order field references a page that does not exist in the document."]
}
}Une X-API-Key absente ou non valide renvoie un 401. Consultez
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.
Déplacer la dernière page au début
curl https://api.pdfblocks.com/v1/reorder_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F page_order='-1,1..-2' \
-o last-first.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/reorder_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'page_order': '-1,1..-2'},
)
response.raise_for_status()
with open('last-first.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('page_order', '-1,1..-2');
const response = await fetch('https://api.pdfblocks.com/v1/reorder_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('last-first.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/reorder_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'),
'page_order' => '-1,1..-2',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('last-first.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/reorder_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
page_order: '-1,1..-2',
})
File.write('last-first.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("page_order", "-1,1..-2")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/reorder_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-first.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,1..-2"), "page_order" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/reorder_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"last-first.pdf", await response.Content.ReadAsByteArrayAsync());Dupliquer la page de couverture
curl https://api.pdfblocks.com/v1/reorder_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F page_order='1,1..-1' \
-o doubled-cover.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/reorder_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'page_order': '1,1..-1'},
)
response.raise_for_status()
with open('doubled-cover.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('page_order', '1,1..-1');
const response = await fetch('https://api.pdfblocks.com/v1/reorder_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('doubled-cover.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/reorder_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'),
'page_order' => '1,1..-1',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('doubled-cover.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/reorder_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
page_order: '1,1..-1',
})
File.write('doubled-cover.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("page_order", "1,1..-1")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/reorder_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("doubled-cover.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,1..-1"), "page_order" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/reorder_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"doubled-cover.pdf", await response.Content.ReadAsByteArrayAsync());