Polotno

PDF tool

Merge PDF files

Combine several PDFs into one document without uploading anything. Reorder before merging, keep each page at its own size, and edit the result before exporting.

Quick answer

Add two or more PDFs, put them in the order you want, and merge them into one document. Each page keeps its own size. Nothing is uploaded.

Formula: PDFs → Polotno JSON each → concatenated pages → PDF (browser-only)

Drop a PDF here, or

Merged in your browser. Your files never leave your machine.

Combine several PDFs into one document without handing them to a server. Add the files in any order, rearrange them, and check the result in an editor before you download it.

Every page keeps its own size

Merging tools often force every page onto the size of the first document, which turns a landscape chart into a stretched or letterboxed mess. Here each page is written with the dimensions it had in its source file, so a mixed stack of A4 portrait, A4 landscape, and A3 comes out with all three intact.

Reorder before you commit

Files are listed in the order you add them, with a page count beside each one. Move them up or down, or drop one you added by mistake. Nothing is combined until you press Merge, and the result opens in the editor where you can still delete or reorder individual pages.

What this does not preserve

The merge runs through a design schema rather than at the byte level. Text, images, and vector artwork survive. Interactive form fields, bookmarks, annotations, and internal links do not. If your documents carry any of those and you need them intact, a byte-level library such as pdf-lib is the right tool and this one is not.

The same operation in code

merge.ts
import { pdfToJson } from "@polotno/pdf-import";
import { jsonToPDFBlob } from "@polotno/pdf-export/browser";

const designs = await Promise.all(
  files.map(async (file) => pdfToJson({ pdf: await file.arrayBuffer() })),
);

// Concatenate pages, pinning each to the size it had in its source doc.
const merged = {
  ...designs[0],
  pages: designs.flatMap((design) =>
    design.pages.map((page) => ({
      ...page,
      width: typeof page.width === "number" ? page.width : design.width,
      height: typeof page.height === "number" ? page.height : design.height,
    })),
  ),
};

const blob = await jsonToPDFBlob(merged);

A page whose size is "auto" inherits its owndocument's dimensions, so it has to be pinned before the pages move into a shared design. See PDF import, PDF export, and PDF editing in the SDK.

Frequently asked questions

Q: How do I merge PDF files?

Drop the first PDF, then add the others one at a time. Reorder them with the arrows, remove any you changed your mind about, and click Merge. The combined document opens in the editor so you can check it before downloading.

Q: Do my files get uploaded?

No. Every file is parsed in your browser with pdf.js and combined locally. Nothing is transmitted, which is the point when you are merging contracts, statements, or medical records.

Q: Can I merge documents with different page sizes?

Yes. Each page keeps the size it had in its source document, so a landscape chart merged into a portrait report stays landscape rather than being stretched to fit.

Q: Is there a limit on how many files I can merge?

No fixed limit, but everything runs in your browser's memory. A few dozen ordinary documents is comfortable; hundreds of image-heavy scans will get slow and may exhaust the tab.

Q: Does this preserve form fields, bookmarks, and links?

No, and this is the important caveat. The merge goes through a design schema: text, images, and vector paths are preserved, but AcroForm fields, bookmarks, annotations, and internal links are not. For a byte-level merge that keeps those, use a PDF library like pdf-lib instead.

Q: What about password-protected PDFs?

Unlock them before merging. An encrypted file is rejected with a message rather than silently skipped.

Want this in your app? Embed Polotno SDK.

TRUSTED BY

100,000+

CREATORS

300+

BUSINESSES

ExpediaUnbounceLovePopPostGridPredis.ai