Dividere un PDF per dimensione del file
Dividere un PDF in documenti più piccoli, ciascuno non più grande di una dimensione massima in byte.
Dividere un documento PDF in più documenti più piccoli, ciascuno non più grande
di una dimensione massima del file in byte. Questa azione restituisce più
documenti, impacchettati in un’unica risposta secondo l’intestazione Accept.
L’API è stateless: il documento viene elaborato nella sua regione e non viene
mai memorizzato.
Endpoint
/v1/split_by_sizeDisponibile 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/split_by_size |
| Stati Uniti | https://us.api.pdfblocks.com/v1/split_by_size |
| HIPAA Stati Uniti | https://hipaa.api.pdfblocks.com/v1/split_by_size |
| Unione europea | https://eu.api.pdfblocks.com/v1/split_by_size |
| Regno Unito | https://uk.api.pdfblocks.com/v1/split_by_size |
| Canada | https://ca.api.pdfblocks.com/v1/split_by_size |
| Australia | https://au.api.pdfblocks.com/v1/split_by_size |
| Giappone | https://jp.api.pdfblocks.com/v1/split_by_size |
| India | https://in.api.pdfblocks.com/v1/split_by_size |
| Brasile | https://br.api.pdfblocks.com/v1/split_by_size |
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.
maximum_bytesintegerrequiredLa dimensione massima, in byte, di ogni PDF di output. Deve essere 1 o
superiore.
Esempi
Dividere un documento in modo che ogni parte sia al massimo di 1 MB:
curl https://api.pdfblocks.com/v1/split_by_size \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F maximum_bytes=1048576 \
-o parts.zip# pip install requests
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/split_by_size',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'maximum_bytes': 1048576}, # 1 MB
)
response.raise_for_status()
with open('parts.zip', '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('maximum_bytes', '1048576'); // 1 MB
const response = await fetch('https://api.pdfblocks.com/v1/split_by_size', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('parts.zip', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/split_by_size');
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'),
'maximum_bytes' => '1048576', // 1 MB
],
]);
$zip = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('parts.zip', $zip);
}# gem install http
require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/split_by_size', form: {
file: HTTP::FormData::File.new('input.pdf'),
maximum_bytes: '1048576', # 1 MB
})
File.write('parts.zip', 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("maximum_bytes", "1048576") // 1 MB
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/split_by_size", &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("parts.zip")
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("1048576"), "maximum_bytes" }, // 1 MB
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/split_by_size", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"parts.zip", await response.Content.ReadAsByteArrayAsync());Risposta
Questa azione restituisce più documenti, impacchettati in un’unica risposta
secondo l’intestazione di richiesta Accept. Vedere Formati di risposta e
negoziazione del contenuto per il riferimento
completo sulla negoziazione. Senza intestazione Accept, il valore predefinito
è un archivio ZIP:
HTTP/1.1 200 OK
Content-Type: application/zipSelezionare l’impacchettamento con l’intestazione Accept:
Intestazione Accept |
Risposta |
|---|---|
| (nessuna inviata) | application/zip (il valore predefinito) |
application/zip |
Un archivio ZIP dei PDF di output |
application/json |
Una busta JSON di documenti codificati in base64 |
multipart/mixed |
Un PDF per parte |
| qualsiasi altro valore | 406 Not Acceptable |
I documenti di output sono denominati 00001.pdf, 00002.pdf e così via, in
ordine.
Ogni parte viene riempita fino a poco meno di maximum_bytes in base alla
dimensione dell’output generato, quindi le parti si avvicinano al limite senza
mai superarlo. L’eccezione è una singola pagina la cui dimensione supera già da
sola maximum_bytes: viene restituita come parte a sé stante che supera il
limite, perché una pagina non viene mai divisa.
Per codice end-to-end che chiama un’azione di divisione e spacchetta ogni formato (estraendo lo ZIP, decodificando la busta JSON o leggendo le parti multipart), vedere la guida Dividere un PDF.
Errori
Le richieste non riuscite restituiscono un corpo application/problem+json.
L’errore più frequente su questo endpoint è un 400, restituito quando
maximum_bytes è assente o inferiore a 1, oppure quando file non è un PDF
leggibile. 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": {
"maximum_bytes": ["The field maximum_bytes must be greater than or equal to 1."]
}
}Se l’intestazione Accept non corrisponde a nessuno tra application/zip,
application/json e multipart/mixed, ad esempio Accept: application/pdf,
l’API risponde con 406 Not Acceptable. Omettere Accept per prendere lo ZIP
predefinito, oppure richiedere uno dei tipi di media supportati. 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
Una variante comune. Espanderla per vedere il codice in tutti i linguaggi.
Ricevere le parti come busta JSON
Inviare Accept: application/json per ottenere tutte le parti in linea in
un’unica risposta, quindi decodificare da base64 il content di ogni voce in un
file con il nome indicato dal suo name:
curl https://api.pdfblocks.com/v1/split_by_size \
-H 'X-API-Key: your_api_key' \
-H 'Accept: application/json' \
-F file=@input.pdf \
-F maximum_bytes=1048576 \
| jq -r '.documents[] | .name + " " + .content' \
| while read -r name content; do
echo "$content" | base64 --decode > "$name"
done# pip install requests
import base64
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/split_by_size',
headers={
'X-API-Key': 'your_api_key',
'Accept': 'application/json',
},
files={'file': file},
data={'maximum_bytes': 1048576},
)
response.raise_for_status()
for document in response.json()['documents']:
with open(document['name'], 'wb') as output:
output.write(base64.b64decode(document['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('maximum_bytes', '1048576');
const response = await fetch('https://api.pdfblocks.com/v1/split_by_size', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key', Accept: 'application/json' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const { documents } = await response.json();
for (const doc of documents) {
await writeFile(doc.name, Buffer.from(doc.content, 'base64'));
}<?php
$ch = curl_init('https://api.pdfblocks.com/v1/split_by_size');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: your_api_key',
'Accept: application/json',
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'maximum_bytes' => '1048576',
],
]);
$body = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
foreach (json_decode($body, true)['documents'] as $document) {
file_put_contents($document['name'], base64_decode($document['content']));
}
}# gem install http
require 'base64'
require 'http'
require 'json'
response = HTTP
.headers('X-API-Key' => 'your_api_key', 'Accept' => 'application/json')
.post('https://api.pdfblocks.com/v1/split_by_size', form: {
file: HTTP::FormData::File.new('input.pdf'),
maximum_bytes: '1048576',
})
if response.status.success?
JSON.parse(response.body)['documents'].each do |document|
File.write(document['name'], Base64.decode64(document['content']))
end
endpackage main
import (
"bytes"
"encoding/base64"
"encoding/json"
"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("maximum_bytes", "1048576")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/split_by_size", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
req.Header.Set("Accept", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var result struct {
Documents []struct {
Name string `json:"name"`
Content string `json:"content"`
} `json:"documents"`
}
json.NewDecoder(res.Body).Decode(&result)
for _, doc := range result.Documents {
data, _ := base64.StdEncoding.DecodeString(doc.Content)
os.WriteFile(doc.Name, data, 0644)
}
}using System.Text.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
client.DefaultRequestHeaders.Add("Accept", "application/json");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("1048576"), "maximum_bytes" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/split_by_size", form);
response.EnsureSuccessStatusCode();
using var json = JsonDocument.Parse(
await response.Content.ReadAsStringAsync());
foreach (var document in json.RootElement.GetProperty("documents").EnumerateArray())
{
var name = document.GetProperty("name").GetString()!;
var content = document.GetProperty("content").GetString()!;
await File.WriteAllBytesAsync(name, Convert.FromBase64String(content));
}