Manipulation · Go

Merge PDF files in Go

Combine, split, reorder and rotate PDF pages from Go. rust-pdf parses each document into an editable model, renumbers and remaps every object correctly on merge, and rebuilds a clean page tree on output.

Why Go needs this

Go's PDF story is fragmented: gofpdf is archived and unipdf is commercial, so production-grade output usually means a paid dependency or a brittle wrapper.

Merging and splitting are list operations on a flat page order: append another document, extract a subset, reverse, rotate or delete pages, then save. Because the parser handles classic and cross-reference streams, object streams and encrypted input, it works on real-world files, not just ones it wrote itself.

  • Merge whole documents, extract page subsets, reorder with a permutation, rotate or delete pages.
  • Objects are renumbered and references deep-remapped, so merged files stay valid.
  • Reads classic and xref streams, object streams and RC4 / AES encrypted input.

Merge PDFs in Go with rust-pdf

Install the package, then call the same idiomatic API every rust-pdf binding shares. The snippet below is real Go code from the reference docs.

Go
ad, _ := os.ReadFile("a.pdf")
bd, _ := os.ReadFile("b.pdf")
a, _ := rustpdf.Load(ad)
defer a.Close()
b, _ := rustpdf.Load(bd)
_ = a.Merge(b)                 // a now has a's pages followed by b's
b.Close()
_ = a.RotatePage(0, 90)
_ = a.Save("merged.pdf")

sub, _ := a.ExtractPages([]int{0, 2})   // pages 1 and 3
defer sub.Close()
_ = sub.Save("subset.pdf")
Validated by: qpdfmutool

This is part of the free tier in Go. No license required.

Full Go reference in the documentation.

Merging in Go: FAQ

Can I merge more than two PDFs in Go?

Yes. Load each document and call merge for each one; pages are appended in order. You can then reorder, rotate or extract any subset before saving.

Does merging keep the files valid?

Yes. On merge every object from the other document is renumbered and its references are deep-remapped, and the real page tree is rebuilt on output, so the result passes qpdf and mutool.

Is merging free?

Yes. Loading, merging, splitting, reordering and text extraction are all part of the free tier in Go. You only need a license for the corporate features such as PDF/A, signatures and encryption.

Merge PDF Files in Go

One Rust core, the same output across every language. Prototype for free, license the corporate features when you ship.