Dividir um PDF por tamanho de arquivo
Divida um PDF em documentos menores, nenhum deles maior que um tamanho máximo em bytes.
Divida um documento PDF em vários documentos menores, nenhum deles maior que um
tamanho máximo de arquivo em bytes. Esta ação retorna vários documentos,
empacotados em uma única resposta de acordo com o cabeçalho Accept. A API é
stateless: seu documento é processado na própria região e nunca é armazenado.
Endpoint
/v1/split_by_sizeDisponível em todas as regiões. Consulte Regiões e residência de dados para o roteamento e a residência de dados.
| Região | URL |
|---|---|
| Global | https://api.pdfblocks.com/v1/split_by_size |
| Estados Unidos | https://us.api.pdfblocks.com/v1/split_by_size |
| HIPAA Estados Unidos | https://hipaa.api.pdfblocks.com/v1/split_by_size |
| União Europeia | https://eu.api.pdfblocks.com/v1/split_by_size |
| Reino Unido | https://uk.api.pdfblocks.com/v1/split_by_size |
| Canadá | https://ca.api.pdfblocks.com/v1/split_by_size |
| Austrália | https://au.api.pdfblocks.com/v1/split_by_size |
| Japão | https://jp.api.pdfblocks.com/v1/split_by_size |
| Índia | https://in.api.pdfblocks.com/v1/split_by_size |
| Brasil | https://br.api.pdfblocks.com/v1/split_by_size |
Autenticação
Autentique cada requisição com sua chave de API secreta no cabeçalho
X-API-Key, por HTTPS. Crie e gerencie suas chaves no
dashboard. Consulte
Autenticação para mais detalhes.
Requisição
O endpoint aceita um corpo de requisição multipart/form-data.
filefilerequiredO documento PDF de entrada.
maximum_bytesintegerrequiredO tamanho máximo, em bytes, de cada PDF de saída. Deve ser 1 ou maior.
Exemplos
Divida um documento de modo que cada parte tenha no máximo 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());Resposta
Esta ação retorna vários documentos, empacotados em uma única resposta de
acordo com o cabeçalho de requisição Accept. Consulte Formatos de resposta e
negociação de conteúdo para a referência completa
da negociação. Sem o cabeçalho Accept, o padrão é um arquivo ZIP:
HTTP/1.1 200 OK
Content-Type: application/zipSelecione o empacotamento com o cabeçalho Accept:
Cabeçalho Accept |
Resposta |
|---|---|
| (nenhum enviado) | application/zip (o padrão) |
application/zip |
Um arquivo ZIP com os PDFs de saída |
application/json |
Um envelope JSON com documentos codificados em base64 |
multipart/mixed |
Um PDF por parte |
| qualquer outra coisa | 406 Not Acceptable |
Os documentos de saída são nomeados 00001.pdf, 00002.pdf e assim por
diante, em ordem.
Cada parte é preenchida até ficar logo abaixo de maximum_bytes, segundo o
tamanho da saída gerada, de modo que as partes se aproximam do limite sem
nunca ultrapassá-lo. A exceção é uma única página cujo próprio tamanho já
ultrapassa maximum_bytes: ela é retornada sozinha em uma parte que excede o
limite, porque uma página nunca é dividida.
Para código de ponta a ponta que chama uma ação de divisão e desempacota cada formato (extrair o ZIP, decodificar o envelope JSON ou ler as partes multipart), consulte o guia Dividir um PDF.
Erros
Requisições com falha retornam um corpo application/problem+json. O erro mais
comum neste endpoint é um 400, retornado quando maximum_bytes está ausente
ou é menor que 1, ou quando file não é um PDF legível. O objeto errors
nomeia cada 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 o cabeçalho Accept não corresponder a nenhum dos tipos application/zip,
application/json ou multipart/mixed, por exemplo Accept: application/pdf,
a API responde 406 Not Acceptable. Omita Accept para usar o padrão ZIP ou
peça um dos tipos de mídia compatíveis. Uma X-API-Key ausente ou inválida
retorna um 401. Consulte Erros para todos os códigos de
status e o formato completo da resposta.
Receitas
Uma variação comum. Expanda-a para ver o código em todas as linguagens.
Receber as partes como um envelope JSON
Envie Accept: application/json para receber todas as partes em linha em uma
única resposta e depois decodifique de base64 o content de cada entrada em um
arquivo nomeado a partir do seu 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));
}