$builder->PathBegin();
$builder->MoveTo(306, 396);
$builder->CurveTo(681, 771, 399.75, 864.75, 306, 771);
$builder->CurveTo(212.25, 864.75, -69, 771, 306, 396);
$builder->ClosePath();
$element = $builder->PathEnd();
// path is now constructed
$element->SetPathClip(true);
// this path is a clipping path
$element->SetPathStroke(true);
// this path should be filled and stroked
$gstate = $element->GetGState();
$gstate->SetTransform(0.5, 0.0, 0.0, 0.5, -20.0, 0.0);
$writer->WriteElement($element);
$writer->WriteElement($builder->CreateImage($img, 100.0, 300.0, 400.0, 600.0));
$writer->WriteElement($builder->CreateGroupEnd());
// Restore the graphics state
$writer->End();
// save changes to the current page
$doc->PagePushBack($page);
// Start a new page ------------------------------------
$page = $doc->PageCreate(new Rect(0.0, 0.0, 612.0, 794.0));
$writer->Begin($page);
// begin writing to this page
$builder->Reset();
// Reset the GState to default
// Begin writing a block of text
$element = $builder->CreateTextBegin(Font::Create($doc->GetSDFDoc(), Font::e_times_roman), 12.0);
$writer->WriteElement($element);
$element = $builder->CreateTextRun("Hello World!");
$element->SetTextMatrix(10.0, 0.0, 0.0, 10.0, 0.0, 600.0);