fileformer
search⌘KtranslateENexpand_moreupload_fileConvert
Converters8 file families · 44 direct conversions
What changes in a conversionarrow_forward
home/pdf-tools/merge-pdf

Merge PDF

Combine several PDFs into one file, in the order you choose. Built on your device, with text and links kept.

uploadnone
keepstext & links
watermarknever
three steps
1
Add your PDFsTwo or more. Each is read here to count its pages.
2
Set the orderMove files up or down, or switch to Pages and skip the ones you don’t want.
3
Merge and downloadOne bookmark per file if you like, and an optional blank page between them.
descriptionFilesgrid_viewPages
sort_by_alphaSort A: ZaddAdd PDF
PDF pages · arrow_upwardarrow_downwardclose
picture_as_pdfDrop PDFs hereor use “Add PDF”. Add at least two to merge.
Click a page to skip it. Skipped pages won't be in the merged file.
~/how-merging-works

One file, nothing lost.

Merging copies each page object as it is. The map below follows your list above: change the order or skip a page and it redraws.

page map0 files → 0 pages
south
merged.pdf
Dots mark the bookmark at the start of each file.
kept exactly
check_circleSelectable, searchable text
check_circleLinks and form fields
check_circleOriginal image quality
check_circlePage sizes and orientation
worth knowing
infoPassword-protected PDFs need to be unlocked first.
infoVery large files are limited by your device’s memory.
infoMerging doesn’t shrink files: compress afterwards if needed.
infoDigital signatures from the originals won’t stay valid.
~/under-the-hood

What actually happens when PDFs merge.

A PDF isn't one long picture, it's a set of numbered objects: pages, fonts, images and a table of contents that ties them together. Step through a merge.

invoice.pdfdescription1 pagedescription2 pagetext_fields3 font Interimage4 logo.png
contract.pdfdescription1 pagedescription2 pagetext_fields3 font Interimage4 logo.png
merged.pdfhourglass_emptywaiting…
arrow_back
arrow_forward
step 1 of 4Read both files

Each PDF is opened and its object table is read, every page, font and image gets an ID number. Nothing is rendered or changed yet.

lightbulbThis is why merging is fast: it’s bookkeeping, not re-drawing.
~/a-real-merge

Three real PDFs, merged in your browser.

Your browser just built three small PDFs. Each one numbers its objects from 1 and carries its own copy of Helvetica, and two of them embed the same logo. Merge them with or without sharing duplicates, then download every file and open it. The byte counts are real.

Share identical fonts and imagesAdd a bookmark per file
three inputs28,574 B26 objects, each file numbered from 1.
merged.pdf15,953 B23 objects, renumbered into one sequence.
difference−12,621 BOne logo and one Helvetica instead of two and three, and one header and xref instead of three.
inputs · click to see the renumbering
invoice.pdf2 pages · 8 objects · 13,542 Bdownload
contract.pdf3 pages · 11 objects · 14,054 Bdownload
appendix.pdf2 pages · 7 objects · 978 Bdownload
southpicture_as_pdfmerged.pdf7 pages · 23 objects · 15,953 Bdownload
1 0 obj << /Type /Catalog /Pages 2 0 R /Outlines 3 0 R /PageMode /UseOutlines >>2 0 obj << /Type /Pages /Kids [9 0 R 11 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R] /Count 7 >>
in contractobjectin mergedwhy
obj 1CatalogdroppedA file has one catalog. The merged file writes a new one as obj 1.
obj 2Pages (root)droppedReplaced by one new page tree, obj 2, listing every page in order.
obj 3Font Helvetica→ obj 7Identical bytes already copied from invoice.pdf, so this page points at that copy.
obj 4Font Times-Romanobj 13Renumbered so it can’t clash with obj 4 in the other files.
obj 5Image logo→ obj 8Identical bytes already copied from invoice.pdf, so this page points at that copy.
obj 6Page 1obj 14/Parent now points at obj 2, and every reference inside is rewritten.
obj 7Content 1obj 15Renumbered so it can’t clash with obj 7 in the other files.
obj 8Page 2obj 16/Parent now points at obj 2, and every reference inside is rewritten.
obj 9Content 2obj 17Renumbered so it can’t clash with obj 9 in the other files.
obj 10Page 3obj 18/Parent now points at obj 2, and every reference inside is rewritten.
obj 11Content 3obj 19Renumbered so it can’t clash with obj 11 in the other files.
~/when-names-collide

Pages merge cleanly. Document-level names don't.

Object numbers can be renumbered silently. But some things are looked up by name or stored once per document, and two files often use the same names. Pick one to see what goes wrong and how a careful merger handles it.

edit_noteForm fieldslinkNamed destinationsformat_list_numberedPage labelslayersLayersplay_arrowOpen actioninfoMetadata
invoice.pdf
/AcroForm /Fields (Name) = "Ana Ruiz" (Date) = "2026-03-31"
contract.pdf
/AcroForm /Fields (Name) = "" (Sign) signature
cancelnaive mergeBoth files have a field called Name. In one AcroForm, fields with the same fully qualified name are the same field, so typing in the contract’s Name box overwrites the invoice.
check_circlecareful mergeRename incoming fields with a per-file prefix (contract.Name) before joining the /Fields arrays. Keep them shared only if the user wants one answer.ISO 32000-1 §12.7.3.2
~/when-to-merge

Six jobs merging makes easier.

request_quoteExpense claims
Put the claim form and every receipt into one file your finance team can open in one go.
swap_vertclaim form → receipts by date
workJob applications
Send one polished document instead of four attachments that arrive in a random order.
swap_vertcover letter → CV → portfolio
gavelContracts & signatures
Combine the agreement with its schedules and the signed signature page.
swap_vertcontract → schedules → signed page
schoolCoursework
Assemble chapters written separately into a single submission.
swap_verttitle → chapters 1: n → references
homeRental & loan paperwork
Landlords and lenders usually want ID, payslips and statements as one PDF.
swap_vertID → payslips → bank statements
menu_bookScanned documents
Phone scans often save one page per file: merge them back into the whole document.
swap_vertpage_001 → page_002 → …
~/if-something-looks-off

Something not right? Start here.

The most common merge problems, why they happen and the quickest fix.

lockA file won’t addWhy:It’s password-protected or restricted against editing.buildOpen it with its password in the PDF Protect tool, save an unlocked copy, then merge.
aspect_ratioPages are different sizesWhy:An A4 file and a US Letter file keep their own page sizes after merging.buildThat’s expected and prints fine. To make them uniform, print both to the same paper size first.
screen_rotationSome pages are sidewaysWhy:The original page was scanned or saved rotated.buildRotate the page in the source file, or skip it in Pages view and add a corrected copy.
data_usageThe merged file is hugeWhy:Merging keeps full image quality from every original: scans add up quickly.buildRun the result through the PDF compressor; scanned pages usually shrink 60-80%.
drawSignatures show as invalidWhy:A digital signature covers the exact original file, and merging creates a new one.buildKeep the signed original as the record and share the merged copy for convenience.
edit_noteForm fields stopped workingWhy:Two files used the same field names, so the fields now share one value.buildFlatten the forms (print to PDF) before merging if they don’t need to stay editable.
~/reference

Merging from the command line.

The same job in the six tools you're most likely to find on a server or in a script. Most copy objects structurally, as this page does. Ghostscript is the exception: it redraws every page.

toolcommandhow it merges
qpdfopen source · C++qpdf --empty --pages a.pdf b.pdf -- out.pdfStructural copy with renumbering. Document-level data such as bookmarks comes only from the primary input, which here is empty.
pdftkPDF Labspdftk a.pdf b.pdf cat output out.pdfStructural copy. Handles let you pick ranges from each input: A=a.pdf B=b.pdf cat A1-3 B2 output out.pdf.
pdfunitePopplerpdfunite a.pdf b.pdf out.pdfJoins whole files in order. No page selection, and no options.
mutool mergeMuPDFmutool merge -o out.pdf a.pdf 1-3 b.pdfStructural copy. A page range can follow each input file.
pypdfPython libraryw = PdfWriter(); w.append("a.pdf"); w.append("b.pdf"); w.write("out.pdf")Structural copy from code. append() also accepts page ranges and outline options.
GhostscriptArtifexgs -sDEVICE=pdfwrite -o out.pdf a.pdf b.pdfInterprets every page and writes a new PDF. Fonts and images are rebuilt and can be recompressed, so it is not a lossless copy.

What made merging harder over time

1993PDF 1.0Numbered objects and a cross-reference table: the model every merger renumbers.
1996PDF 1.2Interactive forms and name trees add document-wide names that can collide.
1999PDF 1.3Page labels and digital signatures, both tied to one file’s page order and bytes.
2001PDF 1.4Tagged PDF adds a structure tree that a merger has to graft together.
2003PDF 1.5Object streams and xref streams: objects must be unpacked before they can be copied.
2004PDF 1.6Optional content (layers) becomes widely used, with one /OCProperties per file.
2008ISO 32000-1PDF 1.7 becomes an ISO standard, with a free copy from Adobe.
2017PDF 2.0ISO 32000-2 keeps the object model and adds stricter metadata rules.