Rimuovere pagine da un PDF
Rimuovere una selezione di pagine da un PDF con il parametro pages. Almeno una pagina rimane sempre, quindi la selezione non può coprire l’intero documento.
Rimuovere una o più pagine da un documento PDF. Selezionare le pagine da
scartare con il parametro pages; poiché deve
rimanere almeno una pagina, la selezione non può coprirle tutte. L’API è
stateless: il documento viene elaborato nella sua regione e non viene mai
memorizzato.
Endpoint
/v1/remove_pagesDisponibile in tutte le regioni. Vedere Regioni e residenza dei dati per il routing e la residenza dei dati.
| Regione | URL |
|---|---|
| Globale | https://api.pdfblocks.com/v1/remove_pages |
| Unione europea | https://eu.api.pdfblocks.com/v1/remove_pages |
| Stati Uniti | https://us.api.pdfblocks.com/v1/remove_pages |
| HIPAA Stati Uniti | https://hipaa.api.pdfblocks.com/v1/remove_pages |
| Regno Unito | https://uk.api.pdfblocks.com/v1/remove_pages |
| Canada | https://ca.api.pdfblocks.com/v1/remove_pages |
| Australia | https://au.api.pdfblocks.com/v1/remove_pages |
| Giappone | https://jp.api.pdfblocks.com/v1/remove_pages |
| India | https://in.api.pdfblocks.com/v1/remove_pages |
| Brasile | https://br.api.pdfblocks.com/v1/remove_pages |
Autenticazione
Autenticare ogni richiesta con la chiave API segreta nell’intestazione
X-API-Key, tramite HTTPS. Le chiavi si creano e si gestiscono dalla
dashboard. Vedere
Autenticazione per i dettagli.
Richiesta
L’endpoint accetta un corpo della richiesta multipart/form-data.
filefilerequiredIl documento PDF di input.
pagesstringrequiredLe pagine da rimuovere, scritte come un intervallo di
pagine, ad esempio 2,4..6. La selezione non può
coprire tutte le pagine: almeno una pagina deve rimanere. Massimo 1000
caratteri.
Selezionare le pagine
Il parametro pages accetta un elenco di numeri di pagina in base 1 e di
intervalli, separati da virgole. Viene trattato come un insieme: l’ordine e
i duplicati sono ignorati e le pagine rimanenti mantengono il loro ordine
originale nel documento.
| Schema | Rimuove |
|---|---|
1 |
Solo la prima pagina |
1..3,5 |
Le pagine 1, 2, 3 e 5 |
2.. |
Dalla pagina 2 all’ultima pagina |
..-2 |
Dalla prima pagina alla penultima |
-1 |
L’ultima pagina |
Vedere Selezionare le pagine per il riferimento completo.
La selezione è un insieme e deve lasciare almeno una pagina. Una
selezione che copre tutte le pagine viene rifiutata con un 400.
Esempi
Rimuovere la pagina 2 e le pagine da 4 a 6 da un PDF:
curl https://api.pdfblocks.com/v1/remove_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='2,4..6' \
-o trimmed.pdf# pip install requests
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/remove_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '2,4..6'},
)
response.raise_for_status()
with open('trimmed.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', '2,4..6');
const response = await fetch('https://api.pdfblocks.com/v1/remove_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('trimmed.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/remove_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' => '2,4..6',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('trimmed.pdf', $pdf);
}# gem install http
require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/remove_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '2,4..6',
})
File.write('trimmed.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", "2,4..6")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/remove_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("trimmed.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("2,4..6"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/remove_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"trimmed.pdf", await response.Content.ReadAsByteArrayAsync());Risposta
In caso di successo, la risposta è 200 OK e il corpo contiene il PDF
ridotto:
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 26417Le pagine rimanenti mantengono il loro ordine originale: vengono scartate solo le pagine selezionate. Scrivere il corpo direttamente in un file, come fanno gli esempi qui sopra; dalla nostra parte non viene memorizzato nulla.
Errori
Le richieste non riuscite restituiscono un corpo application/problem+json.
L’errore più frequente su questo endpoint è un 400, restituito quando pages
è malformato o rimuoverebbe tutte le pagine. L’oggetto errors nomina ogni
campo:
{
"type": "https://www.pdfblocks.com/docs/api/v1/error/400",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"pages": ["At least one page must remain, so the selection cannot cover every page."]
}
}Una X-API-Key assente o non valida restituisce un 401. Vedere
Errori per tutti i codici di stato e la forma completa
della risposta.
Ricette
Varianti comuni. Espanderne una per vederla in tutti i linguaggi.
Scartare l’ultima pagina
curl https://api.pdfblocks.com/v1/remove_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='-1' \
-o without-last.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/remove_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '-1'},
)
response.raise_for_status()
with open('without-last.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/remove_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('without-last.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/remove_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('without-last.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/remove_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '-1',
})
File.write('without-last.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/remove_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("without-last.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/remove_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"without-last.pdf", await response.Content.ReadAsByteArrayAsync());Rimuovere la pagina di copertina
curl https://api.pdfblocks.com/v1/remove_pages \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F pages='1' \
-o no-cover.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/remove_pages',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'pages': '1'},
)
response.raise_for_status()
with open('no-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('pages', '1');
const response = await fetch('https://api.pdfblocks.com/v1/remove_pages', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('no-cover.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/remove_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('no-cover.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/remove_pages', form: {
file: HTTP::FormData::File.new('input.pdf'),
pages: '1',
})
File.write('no-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("pages", "1")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/remove_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("no-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"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/remove_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"no-cover.pdf", await response.Content.ReadAsByteArrayAsync());