Combine multiple PDFs into one file in seconds
Upload two or more PDF files, drag them into the order you want, and download a single merged PDF — no sign-up, no watermark, no file size cap that kicks you off after the first upload.
Everything runs directly in your browser. Your documents are never sent to any server, which matters when you're combining anything sensitive — contracts, payslips, medical records, or client reports.
How to merge PDF files
- Add your files — click "Choose files" or drag and drop two or more PDFs onto the tool above.
- Set the order — drag the thumbnails to arrange the pages exactly as you want them in the final document.
- Click Merge — the tool stitches the files together inside your browser in a few seconds.
- Download — save the combined PDF to your device. Done.
You can add as many files as you need in one go. If you realise you've added the wrong file, just remove it and add the correct one before merging.
Worked example
Say you have three separate files: cover-letter.pdf (1 page), cv.pdf (2 pages), and portfolio.pdf (5 pages). You want them in that exact order as a single submission.
- Upload all three files.
- Drag
cover-letter.pdfto the top, thencv.pdf, thenportfolio.pdf. - Hit Merge.
- Result: merged.pdf — 8 pages, one file, ready to email or upload to a job portal.
The final file opens in any standard PDF reader and prints exactly as expected. No extra blank pages, no reformatting.
How to merge PDFs in code
If you need to combine PDFs automatically — say, as part of a report pipeline — here are the two most common approaches.
Python (using PyPDF2)
# pip install pypdf2
from PyPDF2 import PdfMerger
merger = PdfMerger()
for filename in ['cover-letter.pdf', 'cv.pdf', 'portfolio.pdf']:
merger.append(filename)
merger.write('merged.pdf')
merger.close()
This appends each file in list order and writes the result to merged.pdf. Requires Python 3 and the pypdf2 package.
JavaScript / Node.js (using pdf-lib)
// npm install pdf-lib fs
const { PDFDocument } = require('pdf-lib');
const fs = require('fs');
async function mergePDFs(files, output) {
const merged = await PDFDocument.create();
for (const file of files) {
const bytes = fs.readFileSync(file);
const doc = await PDFDocument.load(bytes);
const pages = await merged.copyPages(doc, doc.getPageIndices());
pages.forEach(page => merged.addPage(page));
}
fs.writeFileSync(output, await merged.save());
}
mergePDFs(['cover-letter.pdf', 'cv.pdf', 'portfolio.pdf'], 'merged.pdf');
pdf-lib is a well-maintained library that works in both Node.js and the browser. The pdf-lib documentation covers advanced options like inserting blank pages or setting metadata.
How it works under the hood
The tool uses the PDF specification (maintained by PDF Association / ISO 32000) to read each file's page tree and cross-reference table, then writes a new PDF containing all the pages in your chosen sequence.
Because this happens inside your browser with JavaScript, no data ever leaves your machine. Close the tab and the files are gone — nothing is cached on a server anywhere.
When to use this tool (and when not to)
| Situation | Use this tool? |
|---|---|
| Combining 2–20 standard PDFs for email or upload | ✅ Perfect fit |
| Merging scanned PDFs (image-based pages) | ✅ Works fine — pages are copied as-is |
| Joining hundreds of files in a nightly batch job | ⚠️ Use a script (Python/Node) for automation |
| Merging password-protected (encrypted) PDFs | ❌ Unlock the files first |
| Combining PDFs where you also need to extract or split specific page ranges | ➡️ Try a dedicated split or extract tool |
For most everyday tasks — submitting application documents, combining invoices, packaging a report with appendices — this tool handles it instantly without installing anything.
Your merged PDF stays 100% private. Unlike most online PDF services, nothing is uploaded to a remote server. The entire process runs in your browser tab.
Ready to join your files? Drop them into the tool above and have a single, clean PDF in moments.