Skip to tool

Categories

PDFPage management

Merge PDF

Combine PDFs in your chosen order. Processing happens in a dedicated browser worker.

PDFs to merge

Up to 20 files · 150 MB total in this canary

Drop PDFs here

File signatures and page counts are checked in your browser.

Canary scope: combines page content and order. Bookmarks, signatures, forms, attachments, and document-level metadata are not yet guaranteed.

Add at least 2 PDFs

The originals will not be modified.

About this PDF merger

To combine several PDFs into one: choose the files, set their order with the up and down arrows, and merge. Every page of every file is copied into a new document in that order, and the saved bytes are opened again and their page count checked against the total of the inputs before a download is offered.

This page joins whole PDFs in the order you set — up to 20 files at a time and 150 MB across all of them — using pdf-lib inside the browser tab. Each row of the list shows a file’s page count and size, so you can check what you are about to join before you join it. What the current scope covers is page content and page order: bookmarks, digital signatures, form fields, attachments and document-level metadata are not yet guaranteed to survive, and the page says so above the button. An encrypted PDF is refused with a message to remove its password locally first, rather than being half-read.

Runs in this tab — no uploadFree, no account, no watermarkKept for use with the network off

Step by step

  1. 1Add the PDFsChoose the files, or drop them onto the page. Each one is checked on its first five bytes before anything is parsed, so a file that is not a PDF is refused straight away. The row for each file shows its page count and its size.
  2. 2Put them in orderThe files are joined top to bottom in the list. Every row has an arrow to move that file earlier, an arrow to move it later, and a button to take it out again. Pages inside a file keep their own order — nothing is resequenced within a document.
  3. 3MergeThe merge runs in a Web Worker so the tab stays responsive, copying every page of every file into one new document. No file is sent anywhere; the bytes never leave the page.
  4. 4Let the check run, then downloadThe saved bytes are loaded again as a PDF and the page count compared with the total that went in. Only when those agree is a download offered, and the result panel reports the page count and how long the work took.

How the merge actually works

A PDF is a container of objects, not a stream of pages, so joining two of them is a copy of page objects and everything they reference — fonts, images, colour spaces — into a new document, with the cross-reference table rebuilt around the result. That is what pdf-lib does here, inside a Web Worker in this tab, and it is why merging is lossless for page content: nothing is rasterised, no text is redrawn, and a vector drawing that was sharp in the source is the same drawing in the output.

It is also why the check at the end is worth having. A merge that silently drops a page produces a perfectly valid PDF, and you would not know until someone else opened it. So the saved bytes are reopened and counted, and a mismatch fails the run rather than handing you a file. That check runs every time, not on request.

What it will not do

Bookmarks, digital signatures, form fields, attachments and document-level metadata are outside today’s scope and are not guaranteed to survive the merge. If your files carry any of those, open the result and check before you rely on it — that sentence is printed above the merge button as well, not buried here.

It also will not split, reorder or drop pages inside a file. That is a different job and it has its own page: use Extract PDF pages to keep only the pages you want, or Organise PDF pages to reorder and delete, and merge the results afterwards.

An encrypted PDF is refused rather than half-read, with a message asking you to remove its password locally and try again. The error names only the file you chose; nothing read from inside it appears in any message, because a message is the one place file content could plausibly leak into a log.

Limits, and why they are what they are

Up to 20 files, and 150 MB across all of them. Both are checked as you choose the files and the message names which limit you reached. The file count is a running total, so you can add documents in batches until you reach twenty.

The limits exist because the work happens in your own device’s memory. A server-side merger can quietly stream a two-gigabyte job through a machine with more RAM than your laptop; a browser tab cannot, and a tab that runs out of memory takes your work with it. A stated ceiling that holds is better than an unstated one that fails halfway.

Why your files stay on your device

Every response from this site is served with a Content Security Policy whose connect-src directive is set to none. That is not a promise in marketing copy; it is an instruction to your browser, and the browser is the one enforcing it. While this page is open it cannot open a connection to anywhere — not to this site, not to anyone else — so there is no path by which your document could be uploaded, not by a bug, not by a future change, not by a script that should not be here. e2e/egress-proof.spec.ts asserts the served header and then tries to send data out by every route a page has and requires each attempt to be refused, and it runs on every build.

The second half of the guarantee is that the code has nowhere to send anything from. lib/tools/local-source-policy.test.ts reads every source file under lib/tools, workers, components and app on every test run and fails the build if any of them contains fetch, XMLHttpRequest, WebSocket, EventSource, sendBeacon or a peer connection, or even a remote address written down in a comment. A tool here cannot acquire an upload by accident, because the file that would have to contain one cannot be committed.

This is one of the few pages kept in the service worker’s precache list, so once you have visited it the page and its code are held on your device and it opens with the network switched off. e2e/share-target.spec.ts proves exactly that on this route: it fills the cache, disconnects the browser, loads /pdf/merge, and requires a 200, a visible heading, a working file input, and the same connect-src none header on the response the worker synthesised.

Questions people ask

How many PDFs can I combine at once, and how large?
Up to 20 files, and 150 MB in total across them. Both limits are checked when you choose the files, and the message names which one you reached. The 20-file limit counts files already in the list, so you can add them in batches up to that total.
How do I control the order the pages end up in?
Files are joined top to bottom in the list shown on the page. Every row has an arrow to move that file earlier, an arrow to move it later, and a button to remove it. Pages within a file keep their own order; this tool does not reorder or drop pages inside a file.
What is not carried across?
Bookmarks, digital signatures, form fields, attachments and document-level metadata. The scope today is page content and page order. If your files carry any of those, open the result and check before you rely on it.
What happens with an encrypted or damaged file?
An encrypted PDF is refused with advice to remove its password locally and try again. A file that is not a PDF is refused on its first five bytes, before any parsing. In both cases the error identifies only the file you chose — nothing read from inside it appears in the message.
How do I know the result is complete?
The saved bytes are loaded again as a PDF and the page count is compared with the number of pages that went in. If the two disagree the run fails instead of handing you a file, and that check runs every time rather than on request. The result panel reports the page count and how long the work took.
Is there a watermark, a sign-up, or a daily limit?
None of the three. There is no account, no email box, no queue and no watermark on the output, and no cap on how many times you can run it. There is nothing to meter, because the work happens on your computer rather than on one of ours — the merge costs us nothing per run, so there is nothing to charge for per run.
Does it work offline?
On this page, yes, once you have opened it once with a connection. It is one of a small number of routes held in the service worker cache, so the page and its code are already on your device and it opens with the network off. Most pages on this site are not in that list and will not open offline; this one is covered by a test that disconnects the browser and requires the page to load and its file input to work.