PD4ML PDF Merge
PD4ML PDF Merge combines pages from one or more existing PDF files into a single new PDF. For each source you choose which pages to take and in which order, with a short page-range string such as "2-5,8,10-12" or "1+,odd". The tool works on finished PDF files, not on HTML: use it to assemble documents from parts, cut a document down to the pages you need, or write an unencrypted copy of a protected PDF you have the password for. It is available as a Java API, com.pd4ml.pdf.merge, and as a command-line tool, pd4mergecli.
Available from PD4ML v4.1.1. Part of pd4ml.jar and built on PD4ML's own PDF object layer, PD4ML PDF COS; no other PDF library is used.
What you can do with it
- Select page ranges per source: single pages (
N), ranges (N-M, also descending, e.g.5-2), open ranges to the last page (N+), andodd/evenas filters over the other tokens. A page selected twice appears once, at its first position. - Merge any number of sources: pages appear in the order the sources were added, and within a source in the order its range string lists them.
- Read encrypted sources: pass the user or owner password with the source; an empty password is tried as well.
- Encrypt the output: AES-256 with a user and an owner password, or a choice of
RC4_128,AES_128orAES_256together with raw/Ppermission bits. - Filter, reorder or decrypt a single PDF: with exactly one source, the page selection is optional; without it the output holds all pages of the source, decrypted unless output encryption is set.
- Keep tagging where it exists: the structure trees of tagged sources are merged into one
/StructTreeRoot; structure elements that span excluded pages are pruned. - Write compact output: objects that several pages of one source share, such as fonts, are copied once, and the merged pages are grouped in a page tree of at most 10 kids per node.
Quick start
Take the odd pages of pages 2-5 of A.pdf, followed by pages 1, 3 and 6 to the last page of the password-protected B.pdf:
import com.pd4ml.pdf.merge.PdfMergeException;
import com.pd4ml.pdf.merge.PdfMerger;
import java.io.File;
public class MergeQuickStart {
public static void main(String[] args) throws PdfMergeException {
PdfMerger merger = new PdfMerger();
merger.addSource(new File("A.pdf")).selectPages("2-5,odd");
merger.addSource(new File("B.pdf"), "secret").selectPages("1,3,6+");
merger.merge(new File("merged.pdf"));
}
}
Every failure (a wrong password, a page out of range, a malformed source) is reported as a PdfMergeException. To get the result as a byte[] instead of a file, call mergeToBytes(); to encrypt it, call encryptOutput("openPassword", "ownerPassword") before merging.
The same merge from the command line:
java -cp pd4ml.jar com.pd4ml.pdf.merge.cli.Pd4MergeCli \
--in=A.pdf --pages=2-5,odd \
--in=B.pdf --password=secret --pages=1,3,6+ \
--out=merged.pdf
When to use it
| You want to... | Use |
|---|---|
| combine or select pages of existing PDFs | PD4ML PDF Merge |
| make an existing PDF smaller | PD4ML PDF Optimizer |
| sign a PDF digitally | PD4ML PDF Signing |
| export or import annotations and form field values as XFDF | PD4ML PDF XFDF |
| read, inspect or edit individual PDF objects | PD4ML PDF COS |
PD4ML's main API also combines documents: PdfDocument.append(...) and PdfDocument.mergePDFs(...) join two whole documents, and PD4ML.merge(...) puts one page range of an existing PDF before or after a conversion result. Both use PdfMerger internally. Use PD4ML PDF Merge directly when you need more than two sources, a page selection per source, odd/even filters or reordering, or encrypted sources and output.
In this section
- PD4ML PDF Merge API - Programmer's Manual: how a merge works, the
PdfMergerandPdfMergeSourcemethods, the full page-range grammar, encryption, tagging reconciliation, error messages and limitations. - Examples: eight runnable example classes from the
pd4ml-examplesrepository, from a basic two-source merge to error handling. - pd4mergecli Reference: invocation, flags, exit codes, examples and troubleshooting for the command-line tool.
- Javadoc: API reference of the
com.pd4ml.pdf.mergepackage.
