How it works

Rotate PDF pages in 3 steps

  1. 1

    Add your PDF

    Drop a PDF into the upload area or tap "Browse files" to choose from your device.

  2. 2

    Rotate pages

    Each page renders as a thumbnail. Click ↻ or ↺ on individual pages, or use "Rotate All" to fix the entire document at once.

  3. 3

    Download instantly

    Click "Download Rotated PDF." The corrected file is built locally and saved to your downloads.

Why rotate PDFs here?

🔒

No upload

Your document is rotated locally in your browser. Nothing is sent to a server.

Permanent rotation

True PDF rotation — not a viewer-level flip. Displays correctly in every reader and device.

No quality loss

Rotation only changes orientation. Text, images, and layout are perfectly preserved.

Rotate PDF pages online — no upload required

Scanned documents often come out sideways or upside down. PDFs exported from phones or cameras frequently have orientation issues depending on how the device was held. The fix seems simple — rotate the pages — but most tools either upload your file to a server to do it, or only provide a "viewer rotation" that doesn't save permanently.

Important distinction: when you rotate a page in your browser's built-in PDF viewer (Chrome, Edge, Safari), that rotation is temporary — it resets when you close the file and isn't saved to the document. A proper PDF rotation modifies the page's orientation data inside the file itself, so it displays correctly everywhere, permanently. That's what this tool does.

The rotation runs in your browser using pdf-lib, which directly sets the rotation angle in the PDF's page dictionary. Text, images, fonts, and layout are completely untouched — only the viewing angle changes. No rasterization, no quality loss, no upload.

After rotating, you might want to merge the result with other PDFs, compress it for email, or extract specific pages.

Frequently asked questions

// ─── State ─────────────────────────────────────────────── let currentFile = null; let pageRotations = []; // array of degrees added per page (0, 90, 180, 270) let totalPages = 0; let busy = false;