Skip to content

Page Transformer

PageTransformer modifies page geometry — rotation, scaling, and page box dimensions — using incremental updates so the original content is preserved intact.

use Phpdftk\Pdf\Toolkit\PageTransformer;
// From file
$transformer = PageTransformer::open('input.pdf');
// From string
$transformer = PageTransformer::openString($pdfBytes);
// Encrypted PDF
$transformer = PageTransformer::open('secured.pdf', password: 'secret');

Rotation must be a multiple of 90 degrees. Rotations accumulate with any existing page rotation.

// Rotate all pages
$transformer->rotate(90);
// Rotate specific pages
use Phpdftk\Pdf\Toolkit\PageSelector;
$transformer->rotate(180, PageSelector::pages(1, 3));
$transformer->rotate(270, PageSelector::even());

Multiplies all page box dimensions (MediaBox, CropBox, TrimBox, BleedBox, ArtBox) by the given factor:

// Scale all pages to 50%
$transformer->scale(0.5);
// Scale specific pages to 150%
$transformer->scale(1.5, PageSelector::pages(1));

Computes a uniform scale factor to fit pages within the target width and height (in points):

// Scale all pages to fit within A5
$transformer->scaleTo(420, 595);
// Scale specific pages
$transformer->scaleTo(300, 400, PageSelector::range(2, 5));

Set any of the standard page boxes. Values are in points: x and y specify the lower-left corner, w and h specify width and height.

$transformer->setCropBox(36, 36, 540, 720);
// On specific pages
$transformer->setCropBox(0, 0, 300, 400, PageSelector::pages(1));
$transformer->setMediaBox(0, 0, 612, 792); // Letter size
$transformer->setTrimBox(18, 18, 576, 756);
$transformer->setBleedBox(9, 9, 594, 774);

All operations are fluent and can be combined:

PageTransformer::open('input.pdf')
->rotate(90)
->setCropBox(0, 0, 500, 700, PageSelector::pages(1))
->scale(0.8, PageSelector::range(2, 10))
->save('output.pdf');
// To file
$transformer->save('output.pdf');
// To string
$bytes = $transformer->toBytes();
$transformer->getPageCount(); // int
$reader = $transformer->getReader(); // PdfReader