Dividir um PDF por número de páginas
Divida um PDF em partes consecutivas com um número fixo de páginas, e o que sobrar fica na última parte.
Divida um documento PDF em partes consecutivas com um número fixo de páginas: a
última parte fica com as páginas restantes e pode ser menor. 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_page_countDisponí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_page_count |
| Estados Unidos | https://us.api.pdfblocks.com/v1/split_by_page_count |
| HIPAA Estados Unidos | https://hipaa.api.pdfblocks.com/v1/split_by_page_count |
| União Europeia | https://eu.api.pdfblocks.com/v1/split_by_page_count |
| Reino Unido | https://uk.api.pdfblocks.com/v1/split_by_page_count |
| Canadá | https://ca.api.pdfblocks.com/v1/split_by_page_count |
| Austrália | https://au.api.pdfblocks.com/v1/split_by_page_count |
| Japão | https://jp.api.pdfblocks.com/v1/split_by_page_count |
| Índia | https://in.api.pdfblocks.com/v1/split_by_page_count |
| Brasil | https://br.api.pdfblocks.com/v1/split_by_page_count |
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.
page_countintegerrequiredO número de páginas de cada PDF de saída. Deve ser 1 ou mais. A última parte
fica com as páginas restantes e pode ser menor.
Exemplos
Divida um documento em partes de 10 páginas e salve o arquivo ZIP:
curl https://api.pdfblocks.com/v1/split_by_page_count \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F page_count=10 \
-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_page_count',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'page_count': 10},
)
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('page_count', '10');
const response = await fetch('https://api.pdfblocks.com/v1/split_by_page_count', {
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_page_count');
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_count' => '10',
],
]);
$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_page_count', form: {
file: HTTP::FormData::File.new('input.pdf'),
page_count: '10',
})
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("page_count", "10")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/split_by_page_count", &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("10"), "page_count" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/split_by_page_count", 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 os 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.
Para ver 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 page_count 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": {
"page_count": ["The field page_count 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 com 406 Not Acceptable. Omita Accept para ficar com o ZIP
padrão 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_page_count \
-H 'X-API-Key: your_api_key' \
-H 'Accept: application/json' \
-F file=@input.pdf \
-F page_count=10 \
| 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_page_count',
headers={
'X-API-Key': 'your_api_key',
'Accept': 'application/json',
},
files={'file': file},
data={'page_count': 10},
)
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('page_count', '10');
const response = await fetch('https://api.pdfblocks.com/v1/split_by_page_count', {
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_page_count');
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'),
'page_count' => '10',
],
]);
$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_page_count', form: {
file: HTTP::FormData::File.new('input.pdf'),
page_count: '10',
})
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("page_count", "10")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/split_by_page_count", &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("10"), "page_count" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/split_by_page_count", 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));
}Ações relacionadas
Divida em exatamente dois documentos em um ponto de corte.
Limite cada parte pelo tamanho em bytes em vez de pelo número de páginas.
Defina manualmente grupos de páginas arbitrários.
Extraia um intervalo específico em vez de dividir.