Free PDF tool
Rotate PDF pages
Fix scanned pages that are sideways or upside down. Rotate the whole document or only the pages you list.
Your PDF stays on your device
- Free, no account needed
- Built on the open-source libraries pdf-lib and PDF.js
How it works
Rotate PDF pages in 4 steps
- 1
Add a PDF
Drop the document onto the tool or choose it from your device.
- 2
Pick the rotation
Choose 90° clockwise, 180° or 90° counter-clockwise.
- 3
Select pages
Keep all pages or enter a selection such as 2, 5-7 or even.
- 4
Rotate and download
Select Rotate pages and save the corrected PDF.
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.
Is the rotation permanent?
Yes. The rotation is stored in the PDF itself, so the pages appear turned in every viewer and when printed. Content is not re-rendered, so quality is unchanged.
What happens to pages that were already rotated?
The new rotation is added to the existing one. A page stored with a 90° rotation that you rotate by another 90° ends up at 180°.
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
Rotate pages server-side as part of a document pipeline, for example after merging scanned attachments.
POST /v1/pdf-tools/rotatePlanned 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/rotate \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"source": {
"url": "https://example.com/scans/delivery-note-7731.pdf"
},
"pages": "2,4-5",
"degrees": 90
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/pdf-tools/rotate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"source": {
"url": "https://example.com/scans/delivery-note-7731.pdf"
},
"pages": "2,4-5",
"degrees": 90
}),
});
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/rotate",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"source": {
"url": "https://example.com/scans/delivery-note-7731.pdf",
},
"pages": "2,4-5",
"degrees": 90,
},
timeout=90,
)
response.raise_for_status()
print(response.json())