Repository navigation
Merge
huzpsb edited this page Oct 25, 2026
·
1 revision
Concatenate PDFs. Three modes: create (default), append to an existing file, and zip (interleave two files page by page).
pdfcpu2 merge outFile inFile... [flags]
| Flag | Meaning |
|---|---|
-m, --mode |
create (default) | append | zip
|
-b, --bookmarks |
create bookmarks for merged files (skip with -b=false) |
--bookmark-mode |
wrap (default, filename wrapper) | preserve (keep input trees) |
-d, --divider |
insert a blank page between documents |
-s, --sort |
sort inFiles by name |
--opt / --optimize
|
optimize before writing (default on; disable with --opt=false) |
--rmsig |
remove signatures |
pdfcpu2 merge out.pdf a.pdf b.pdf c.pdf
pdfcpu2 merge -s out.pdf quarterly/*.pdf # sorted glob
pdfcpu2 merge -m append out.pdf new.pdf # append to existing out.pdf
pdfcpu2 merge -m zip zipped.pdf odd.pdf even.pdf # interleave two scansstdin works for the first inFile in create mode:
cat cover.pdf | pdfcpu2 merge - - chapter1.pdf chapter2.pdf > book.pdfpackage main
import (
"context"
"github.com/huzpsb/pdfcpu2/pkg/api"
"github.com/huzpsb/pdfcpu2/pkg/pdfcpu/model"
)
func main() {
ctx := context.Background()
conf := model.NewDefaultConfiguration()
// Create out.pdf from a list (divider page off)
err := api.MergeCreateFile(ctx, []string{"a.pdf", "b.pdf"}, "out.pdf", false, conf)
if err != nil {
panic(err)
}
// Append to an existing file
err = api.MergeAppendFile(ctx, []string{"c.pdf"}, "out.pdf", false, conf)
// Zip two files page by page
err = api.MergeCreateZipFile(ctx, "odd.pdf", "even.pdf", "zipped.pdf", conf)
_ = err
}For reader/writer-based streaming use api.Merge(ctx, destFile, inFiles, w, conf, dividerPage) or api.MergeRaw over []io.ReadSeeker.
pdfcpu2 wiki
Getting started
Fork features
Inspect
Document
Pages
Content
Extract
Resources
Security
Viewer
Trust
Developers