Toolkit Overview
The toolkit package (phpdftk/pdf-toolkit) provides reader-to-writer pipelines for common PDF manipulation tasks. Each class follows the same pattern: open a PDF, apply operations, save the result.
Design principles
Section titled “Design principles”- Reader-based: toolkit classes compose
PdfReader+IncrementalWriterorPdfFileWriter— they do not depend on the writer package - Fluent API: chain operations and save in one expression
- Escape hatches: every class exposes
getReader()for raw access - Page selection: shared
PageSelectorutility for targeting specific pages
Available tools
Section titled “Available tools”Text Extraction
Section titled “Text Extraction”use Phpdftk\Pdf\Toolkit\TextExtractor;
$text = TextExtractor::open('report.pdf')->allPages();$results = TextExtractor::open('contract.pdf')->search('liability');Form Filling
Section titled “Form Filling”use Phpdftk\Pdf\Toolkit\FormFiller;
FormFiller::open('form.pdf') ->fill('name', 'Jane Doe') ->check('subscribe') ->select('country', 'Canada') ->save('filled.pdf');PDF Stamping
Section titled “PDF Stamping”use Phpdftk\Pdf\Toolkit\PdfStamper;use Phpdftk\Pdf\Toolkit\Stamper\StampPosition;
PdfStamper::open('report.pdf') ->watermark('DRAFT') ->addPageNumbers(StampPosition::BottomCenter) ->save('stamped.pdf');Page Slicing
Section titled “Page Slicing”use Phpdftk\Pdf\Toolkit\PageSlicer;
PageSlicer::open('large.pdf') ->keepRange(1, 5) ->save('first-five.pdf');PDF Merging
Section titled “PDF Merging”use Phpdftk\Pdf\Toolkit\PdfMerger;
PdfMerger::create() ->addFile('chapter1.pdf') ->addFile('chapter2.pdf') ->save('book.pdf');Page Transformation
Section titled “Page Transformation”use Phpdftk\Pdf\Toolkit\PageTransformer;
PageTransformer::open('input.pdf') ->rotate(90) ->scale(0.8) ->save('output.pdf');Annotation Flattening
Section titled “Annotation Flattening”use Phpdftk\Pdf\Toolkit\AnnotationFlattener;
AnnotationFlattener::open('form.pdf') ->flattenAll() ->save('flat.pdf');Text Redaction
Section titled “Text Redaction”use Phpdftk\Pdf\Toolkit\TextRedactor;
TextRedactor::open('contract.pdf') ->redactText('Jane Doe') ->redactPattern('/\d{3}-\d{2}-\d{4}/') ->apply() ->save('redacted.pdf');Metadata Editing
Section titled “Metadata Editing”use Phpdftk\Pdf\Toolkit\MetadataEditor;
MetadataEditor::open('doc.pdf') ->setTitle('Annual Report') ->setAuthor('Acme Corp') ->save('updated.pdf');Encryption
Section titled “Encryption”use Phpdftk\Pdf\Toolkit\PdfEncrypt;use Phpdftk\Pdf\Toolkit\Encryption\EncryptionMethod;
PdfEncrypt::open('doc.pdf') ->encrypt('user', 'owner', EncryptionMethod::Aes256) ->save('encrypted.pdf');Bookmark Editing
Section titled “Bookmark Editing”use Phpdftk\Pdf\Toolkit\BookmarkEditor;use Phpdftk\Pdf\Toolkit\Bookmark\BookmarkEntry;
BookmarkEditor::open('report.pdf') ->setBookmarks( new BookmarkEntry('Chapter 1', 1), new BookmarkEntry('Chapter 2', 10), ) ->save('bookmarked.pdf');Page Labeling
Section titled “Page Labeling”use Phpdftk\Pdf\Toolkit\PageLabeler;
PageLabeler::open('report.pdf') ->setRomanNumerals(1, 4) ->setArabic(5, null, 1) ->save('labeled.pdf');Page Selection
Section titled “Page Selection”The PageSelector utility is shared across toolkit classes:
use Phpdftk\Pdf\Toolkit\PageSelector;
$all = PageSelector::all();$specific = PageSelector::pages(1, 3, 5);$range = PageSelector::range(2, 8);$even = PageSelector::even();$odd = PageSelector::odd();
// Check if a page matches$even->matches(4, 10); // true (page 4 of 10)
// Get 0-based indices for a total page count$range->resolve(10); // [1, 2, 3, 4, 5, 6, 7] (pages 2-8)Installation
Section titled “Installation”composer require phpdftk/pdf-toolkitThe toolkit requires pdf-core and pdf-reader (pulled in automatically).