Skip to content

Page Slicer

PageSlicer restructures a PDF’s page tree. It rebuilds the document from scratch using PdfFileWriter, so the output is a clean PDF containing only the selected pages.

use Phpdftk\Pdf\Toolkit\PageSlicer;
// From file
$slicer = PageSlicer::open('large.pdf');
// From string
$slicer = PageSlicer::openString($pdfBytes);
// Encrypted PDF
$slicer = PageSlicer::open('secured.pdf', password: 'secret');
$slicer->keepPages(1, 3, 5)->save('selected.pdf');
$slicer->keepRange(1, 5)->save('first-five.pdf');
use Phpdftk\Pdf\Toolkit\PageSelector;
$slicer->keep(PageSelector::even())->save('even-pages.pdf');
$slicer->keep(PageSelector::odd())->save('odd-pages.pdf');
$slicer->keep(PageSelector::range(3, 7))->save('subset.pdf');
$slicer->removePages(1, 2)->save('without-cover.pdf');
$slicer->remove(PageSelector::pages(1, 2))->save('trimmed.pdf');

Pass 1-based page numbers in the desired order:

$slicer->reorder(3, 1, 2)->save('reordered.pdf');
$slicer->reverse()->save('reversed.pdf');

Split at a page boundary, returning two PDF byte strings:

[$firstHalf, $secondHalf] = $slicer->split(6);
// Pages 1-5 in $firstHalf, pages 6+ in $secondHalf
file_put_contents('part1.pdf', $firstHalf);
file_put_contents('part2.pdf', $secondHalf);
// To file
$slicer->save('output.pdf');
// To string
$bytes = $slicer->toBytes();
$slicer->getPageCount(); // int (original page count)
$reader = $slicer->getReader(); // PdfReader