Free PDF tool
Extract pages from a PDF
Pull out the pages you need, such as a signed page or a single chapter, and save them as a new PDF. The pages appear in the order you list them.
Your PDF stays on your device
- Free, no account needed
- Built on the open-source libraries pdf-lib and PDF.js
How it works
Extract pages from a PDF in 4 steps
- 1
Add a PDF
Drop the document onto the tool or choose it from your device.
- 2
List the pages
Enter pages and ranges, for example 3, 7-9 or 12, 1 to reorder.
- 3
Extract
Select Extract pages to build the new document in your browser.
- 4
Download
Save the new PDF. The original file is not changed.
Questions
Frequently asked questions
Are my files uploaded to a server?
No. The tool runs entirely in your browser: the PDF is read, changed and saved on your device, and its contents are never sent to our servers.
Can I change the page order while extracting?
Yes. Pages are added in the order you type them, so 5, 1-2 produces a document that starts with page five followed by pages one and two.
What is the difference to splitting?
Extracting creates one new PDF from your selection. Splitting creates several files at once, one per range.
Can I use password-protected PDFs?
Not in the browser tool. Encrypted PDFs cannot be modified without the password, so the tool reports them instead of producing a broken file. Remove the protection with the software that created it, then try again.
Automate it
Do the same in your application with Dynamic Document API
Use the split endpoint with a single range to extract pages on the server, for example to send only the summary page of a report.
POST /v1/pdf-tools/splitPlanned endpointThis endpoint is specified in the public API but not released yet; the request shape may still change.
curl -X POST https://api-eu.dynamicdocumentapi.com/v1/pdf-tools/split \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"source": {
"render_id": "rnd_01J9ZM1X3F7R8K2C4V6B8N0P2Q",
"file_id": "file_01J9ZM4T6Y8U0I2O4P6A8S0D2F"
},
"ranges": [
"1-2"
]
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/pdf-tools/split", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"source": {
"render_id": "rnd_01J9ZM1X3F7R8K2C4V6B8N0P2Q",
"file_id": "file_01J9ZM4T6Y8U0I2O4P6A8S0D2F"
},
"ranges": [
"1-2"
]
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/pdf-tools/split",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"source": {
"render_id": "rnd_01J9ZM1X3F7R8K2C4V6B8N0P2Q",
"file_id": "file_01J9ZM4T6Y8U0I2O4P6A8S0D2F",
},
"ranges": ["1-2"],
},
timeout=90,
)
response.raise_for_status()
print(response.json())