PHPackages                             benjivm/merge-pdf - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. benjivm/merge-pdf

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

benjivm/merge-pdf
=================

Library for merging multiple PDFs

1.0.1(1y ago)028WTFPLPHPPHP ^7.1||^8.0

Since Jun 10Pushed 1y agoCompare

[ Source](https://github.com/benjivm/merge-pdf)[ Packagist](https://packagist.org/packages/benjivm/merge-pdf)[ Docs](https://github.com/benjivm/merge-pdf)[ RSS](/packages/benjivm-merge-pdf/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (7)Versions (3)Used By (0)

Merge PDF
=========

[](#merge-pdf)

Personal project fork of the original [hanneskod/libmergepdf](https://github.com/hanneskod/libmergepdf) PHP library for merging multiple PDFs. Use at your own risk.

Installation
------------

[](#installation)

```
composer require benjivm/merge-pdf
```

Usage
-----

[](#usage)

Append the first ten pages of **bar.pdf** to **foo.pdf**:

```
use Benjivm\MergePdf\Merger;
use Benjivm\MergePdf\Pages;

$merger = new Merger;
$merger->addFile('foo.pdf');
$merger->addFile('bar.pdf', new Pages('1-10'));
$createdPdf = $merger->merge();
```

Bulk add files from an iterator:

```
use Benjivm\MergePdf\Merger;

$merger = new Merger;
$merger->addIterator(['A.pdf', 'B.pdf']);
$createdPdf = $merger->merge();
```

### Merging pdfs of version 1.5 and later

[](#merging-pdfs-of-version-15-and-later)

The default `FPDI` driver is not able handle compressed pdfs of version 1.5 or later. Circumvent this limitation by using the slightly more experimental `TCPDI` driver.

```
use Benjivm\MergePdf\Merger;
use Benjivm\MergePdf\Driver\TcpdiDriver;

$merger = new Merger(new TcpdiDriver);
```

### Using an immutable merger

[](#using-an-immutable-merger)

Immutability may be achieved by using a `driver` directly.

```
use Benjivm\MergePdf\Driver\Fpdi2Driver;
use Benjivm\MergePdf\Source\FileSource;
use Benjivm\MergePdf\Pages;

$merger = new Fpdi2Driver;

$createdPdf = $merger->merge(
    new FileSource('foo.pdf'),
    new FileSource('bar.pdf', new Pages('1-10'))
);
```

Known issues
------------

[](#known-issues)

- Links and other content outside a page content stream is removed at merge. This is due to limitations in FPDI and not possible to resolve with the current strategy. For more information see [FPDI](https://www.setasign.com/support/faq/fpdi/after-importing-a-page-all-links-are-gone/#question-84).
- *TCPDI* (as used in the *TcpdiDriver* for merging pdfs with newer features) does not seem to be maintained. This makes mergeing fragile for certain kinds of files, and error messages are often all but helpful. This package will not be able to fix issues in *TCPDI*. The long term solution is to switch to a different backend. Suggestions are very welcomed!

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance32

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 89.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

699d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/20e9b94a4de673fb58eb2cb9dea41cbc26e81f6dbe92a81a1eb9d72a62a7f47d?d=identicon)[benjivm](/maintainers/benjivm)

---

Top Contributors

[![hanneskod](https://avatars.githubusercontent.com/u/1369274?v=4)](https://github.com/hanneskod "hanneskod (75 commits)")[![kaystrobach](https://avatars.githubusercontent.com/u/1185776?v=4)](https://github.com/kaystrobach "kaystrobach (2 commits)")[![benjivm](https://avatars.githubusercontent.com/u/6797513?v=4)](https://github.com/benjivm "benjivm (2 commits)")[![md2perpe](https://avatars.githubusercontent.com/u/543239?v=4)](https://github.com/md2perpe "md2perpe (2 commits)")[![proxyconcept](https://avatars.githubusercontent.com/u/620151?v=4)](https://github.com/proxyconcept "proxyconcept (1 commits)")[![svenluijten](https://avatars.githubusercontent.com/u/11269635?v=4)](https://github.com/svenluijten "svenluijten (1 commits)")[![willoller](https://avatars.githubusercontent.com/u/127107?v=4)](https://github.com/willoller "willoller (1 commits)")

---

Tags

pdfmerge

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/benjivm-merge-pdf/health.svg)

```
[![Health](https://phpackages.com/badges/benjivm-merge-pdf/health.svg)](https://phpackages.com/packages/benjivm-merge-pdf)
```

###  Alternatives

[mpdf/mpdf

PHP library generating PDF files from UTF-8 encoded HTML

4.7k77.1M493](/packages/mpdf-mpdf)[iio/libmergepdf

Library for merging multiple PDFs

40813.6M13](/packages/iio-libmergepdf)[jurosh/pdf-merge

PHP PDF Merger

1522.2M5](/packages/jurosh-pdf-merge)[elibyy/tcpdf-laravel

tcpdf support for Laravel 6, 7, 8, 9, 10, 11

3542.7M5](/packages/elibyy-tcpdf-laravel)[karriere/pdf-merge

A wrapper for the TCPDF class that provides an elegant API for merging PDFs

27566.8k1](/packages/karriere-pdf-merge)[imal-h/pdf-box

The most advanced, driver-based PDF manipulation library for PHP v3.0. Supports Ghostscript, Chrome Headless (HTML to PDF), OpenSSL/FPDI (Signing), and PDFtk (Forms).

60403.9k](/packages/imal-h-pdf-box)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
