CruxDevCruxDev Tools Prompts
file Utility • Zero-Server Privacy • 100% Client-Side

PDF Merger

Combine multiple PDF files into a single document. Drag-and-drop pages, export instantly.

Overview

Combine multiple PDF files into one document, in the order you choose, without uploading anything. pdf-lib assembles the merged file in your browser's memory: page counts are shown for every file before you merge, files can be reordered by dragging or with buttons, and the result downloads instantly.

How It Works

Drop two or more PDFs, or select them from the file picker; each appears as a row with its name and page count, read asynchronously so large files do not block the list. Reorder rows by dragging them, or with the up and down arrows; remove a file with the trash button. Press the merge action and the combined PDF downloads as a single file. Files that could not be parsed are flagged on their row rather than breaking the whole merge, and fewer than two files earns a reminder instead of a broken output.

Step-by-Step Usage Guide

  1. Drop or select at least two PDF files.
  2. Check each row's page count and error flag.
  3. Drag or arrow the rows into the order you want.
  4. Merge and download the combined PDF.

Technical Specifications & Standards

Merging uses pdf-lib: each source file is loaded, and its pages are copied page by page into a fresh PDFDocument before saving. The load step passes ignoreEncryption: true, which is worth understanding - pdf-lib can read the structure of some permission-protected PDFs, but it cannot decrypt content encrypted with a password, so such files may merge with missing or blank content even though they load without an error; the honest expectation is that DRM-restricted files are out of scope. Page-level features travel with the copied pages, including their size and rotation, so a merged document mixing A4 and Letter pages keeps each page's own geometry rather than normalising them - that is standard pdf-lib behaviour and usually what you want. Page counts shown in the queue come from parsing each file separately at add time, which is also how unparsable files get flagged early. All processing happens in memory; files are read as ArrayBuffers and never persisted or transmitted.

Targeted Use Cases

  • Combining scanned pages from different sessions into one document.
  • Assembling an application pack from several PDF attachments.
  • Merging chapter PDFs into a single report before distribution.
  • Putting a cover sheet PDF in front of an existing document.

Notes & Gotchas

  • Verify page counts in the queue against expectation before merging.
  • Put files in order first - the merge follows the row order exactly.
  • Password-protected PDFs are out of scope; decrypt or remove protection before merging.
  • For mixed page sizes, remember each page keeps its own dimensions in the output.

Frequently Asked Questions

Is there a limit on file size or count?

No hard limit is enforced, but every file is held in browser memory, so very large PDFs are bounded by your device's memory rather than by the tool.

What happens to password-protected PDFs?

The loader skips the encryption flag, so some permission-protected files load, but password-encrypted content cannot be decrypted here and may merge with blank pages. Remove protection first.

How is the page order decided?

Exactly by the row order at merge time. Drag rows or use the arrows; each source file's internal page order is preserved.

Are my files uploaded?

No. Files are read into browser memory, merged with pdf-lib locally, and the result downloads directly.