Skip to content

PDF Stamper

PdfStamper overlays text on existing PDF pages using incremental updates. Supports positioned text stamps, diagonal watermarks, page numbers, headers, and footers.

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

Add a diagonal watermark across all pages:

$stamper->watermark('DRAFT');

Customize the watermark appearance:

use Phpdftk\Pdf\Toolkit\Stamper\WatermarkStyle;
$stamper->watermark('CONFIDENTIAL', style: new WatermarkStyle(
fontSize: 72.0,
r: 1.0, g: 0.0, b: 0.0, // red
opacity: 0.2,
rotation: 55.0,
));

Apply to specific pages only:

use Phpdftk\Pdf\Toolkit\PageSelector;
$stamper->watermark('DRAFT', pages: PageSelector::range(1, 3));
PropertyDefaultDescription
fontSize60.0Font size in points
r, g, b0.8, 0.8, 0.8Light gray color
opacity0.3Semi-transparent
rotation45.0Degrees counter-clockwise

Place text at a predefined position on the page:

use Phpdftk\Pdf\Toolkit\Stamper\StampPosition;
$stamper->stampText('APPROVED', StampPosition::TopRight);
PositionLocation
StampPosition::TopLeftTop-left corner
StampPosition::TopCenterTop center
StampPosition::TopRightTop-right corner
StampPosition::CenterPage center
StampPosition::BottomLeftBottom-left corner
StampPosition::BottomCenterBottom center
StampPosition::BottomRightBottom-right corner
use Phpdftk\Pdf\Toolkit\Stamper\StampStyle;
$stamper->stampText('APPROVED', StampPosition::TopRight, style: new StampStyle(
fontSize: 14.0,
r: 0.0, g: 0.5, b: 0.0, // green
opacity: 0.8,
));
PropertyDefaultDescription
fontSize12.0Font size in points
r, g, b0.0, 0.0, 0.0Black
opacity1.0Fully opaque
$stamper->addPageNumbers();
// Default: "Page 1 of 10" at bottom center

Customize format and position:

$stamper->addPageNumbers(
position: StampPosition::BottomRight,
format: '{n} / {total}',
);

The {n} and {total} placeholders are replaced with the current page number and total page count.

Convenience methods that stamp text at TopCenter or BottomCenter:

$stamper->header('Acme Corp - Quarterly Report');
$stamper->footer('Confidential - Do Not Distribute');

Both accept optional style and pages parameters:

$stamper->header(
'Internal Only',
style: new StampStyle(fontSize: 8.0, r: 0.5, g: 0.5, b: 0.5),
pages: PageSelector::odd(),
);

All operations are fluent and can be chained:

PdfStamper::open('report.pdf')
->watermark('DRAFT')
->addPageNumbers(StampPosition::BottomCenter)
->header('Acme Corp')
->save('stamped.pdf');
$bytes = $stamper->toBytes();
$stamper->getPageCount(); // int
$reader = $stamper->getReader(); // PdfReader