Technical transparency
How Local PDF Processing Works
What happens to a PDF when you choose it, which network requests the website makes, and how to check the distinction yourself.
Quick summary
PDF processing happens locally in your browser. Your PDF does not need to be uploaded to a remote processing server for this rotation workflow. The website still loads site files over the network; optional analytics is separate and loads after consent.
What happens when you choose a PDF
- The site loads. Your browser requests the page, styles, scripts, and icons.
- You choose a file. The file picker or drop area passes the selected file to the application. No signup is required.
- The browser reads the bytes. The application reads the file into an in-memory byte array. Copies are used by the preview and writer so the original buffer stays available.
- Local checks and previews run. Preflight uses pdf-lib to check the document structure, including encryption and signature indicators. PDF.js reads a copy of the bytes and renders page previews. Its worker script is served as a site asset.
- You set page rotations. The application keeps your page selections and rotation changes in browser state.
- A new PDF is prepared and checked. pdf-lib updates page rotation and serializes the output. PDF.js independently checks that the output parses, has the expected page count, and has the expected rotation on changed pages.
- The browser offers a download. The output becomes a local PDF Blob with a temporary object URL. The Download PDF control asks the browser to save that result.
The file flow uses browser memory. This describes the application’s handling, not a guarantee about browser extensions, operating-system storage, or how your device handles downloaded files.
“No document upload” and website traffic
“No document upload” means the rotation workflow does not require sending PDF bytes or document content to a remote PDF-processing service. It does not mean the website makes zero network requests.
Document processing
Reading the selected PDF, drawing previews, applying rotation, checking output, and creating the download run in the browser.
Website traffic
Loading the site and its worker requires network requests. If you allow analytics, Google receives ordinary site-usage requests, separate from the PDF workflow.
In our production-build local test, HTML, CSS, JavaScript, the PDF.js worker, and a favicon came from the local site origin. No remote fonts, document API, or other third-party resource was observed with analytics declined. The styles use a system font stack. These observations do not establish fully offline operation.
Analytics consent
Declined: in a clean browser state, selecting Decline analytics stored the denied choice. The Google Analytics tag did not load and no GA4 collection request was observed during the test.
Accepted: selecting Allow analytics loaded Google’s tag and produced a GA4 collection request. We inspected request URLs, query parameters, headers, and available bodies; none contained the synthetic PDF marker, filename, or tested text fragment.
Analytics is optional and consent-gated. Consent is remembered in local storage when available, and the tool’s footer has Analytics settings. Declining after a tag has already loaded does not undo earlier requests or unload that script; the declined test used a fresh state.
This static reference page has no client application or analytics script. The consent behavior above describes the interactive tool.
How we verified it
On September 28, 2026, we inspected the implementation and tested its production build on a local preview server using Google Chrome 154.0.8037.57. The source checkpoint was 7c79593259755bc9c391fa1fd567edaae95e20af.
The test file was a generated, three-page PDF containing only synthetic text and vector shapes, marked ROTATEPDFONLINE_SYNTHETIC_PRIVACY_TEST_20260928. Each consent state used a fresh browser context. We rendered previews, rotated one page, rotated selected pages, prepared and checked the output, and downloaded it. Saved rotations were also read back from the downloaded PDF.
| Origin | Purpose | Consent state |
|---|---|---|
| http://127.0.0.1:5219 | Site files and PDF.js worker | Declined and accepted |
| https://www.googletagmanager.com | Google tag script | Accepted only |
| https://www.google-analytics.com | GA4 collection | Accepted only |
No PDF upload was observed in either scenario. No synthetic marker or tested document fragment was found in the inspected requests. The worker was requested as a JavaScript asset; the PDF download used a local object URL.
Behavioral network verification, not a security certification. A single synthetic-file test establishes observed behavior for the tested version and browser. It does not prove that every PDF, browser, extension, future release, or production hosting configuration behaves identically. It is not a cryptographic guarantee of non-upload.
Structural rotation, rather than a temporary viewer change
A viewer’s Rotate View command can change only the display. Here, saving changes the page’s structural rotation entry in the generated PDF. The writer does not intentionally replace page content with preview images. Preview rendering and output generation are separate steps.
For the practical steps, read how to rotate a PDF and save it permanently.
Important limitations
- Digitally signed PDFs: modifying and saving a document may invalidate its signature. Preflight detects signature indicators and asks for acknowledgement; it does not certify signature validity.
- Password-protected or encrypted PDFs: unsupported in the current tool.
- Capacity: browser memory, device performance, and document complexity affect practical limits. A small synthetic file does not establish large-file capacity.
- Scope: rotation does not perform OCR or deskew a slightly tilted scan.
- Security: browser-local processing is not a security certification or a guarantee about the safety of every document or device.
How to verify it yourself
- Use a synthetic, non-sensitive PDF with a distinctive filename and text marker. Do not use a private document for this check.
- Open a fresh browser profile or private session, then open the tool. Open Developer Tools and the Network tab before loading the page. Keep recording through navigation; disable the cache if available.
- Choose Decline analytics. Save or inspect the initial site requests, then clear the log to isolate the document workflow.
- Select the test PDF, wait for previews, rotate a page and selected pages, choose Prepare Rotated PDF, then Download PDF.
- Inspect all requests, including worker traffic, request URLs, query parameters, headers, and available request bodies. Search for your marker, filename, and document text. A worker-script request is not a PDF upload.
- Repeat in another fresh state with Allow analytics. Record the tag and collection requests separately and check them for the same document markers.
- Reopen the downloaded file to check the saved rotations. Record your browser version, test date, and any blocked or unreadable requests; treat incomplete evidence as inconclusive.
A browser’s Network panel may not expose every request or encoded payload in a searchable form. Finding no marker is useful evidence, but is not by itself proof that no document data could leave the device.