1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap; 4*04fd306cSNickeau 5*04fd306cSNickeauuse ComboStrap\Web\Url; 6*04fd306cSNickeau 7*04fd306cSNickeauclass FetcherPdf extends FetcherRawLocalPath 8*04fd306cSNickeau{ 9*04fd306cSNickeau 10*04fd306cSNickeau 11*04fd306cSNickeau private ?int $pageNumber = null; 12*04fd306cSNickeau 13*04fd306cSNickeau 14*04fd306cSNickeau public function buildFromUrl(Url $url): FetcherPdf 15*04fd306cSNickeau { 16*04fd306cSNickeau try { 17*04fd306cSNickeau $fragment = $url->getFragment(); 18*04fd306cSNickeau $fragments = explode($fragment, "="); 19*04fd306cSNickeau if ($fragments[0] === "page" && sizeof($fragments) >= 2) { 20*04fd306cSNickeau try { 21*04fd306cSNickeau $this->pageNumber = DataType::toInteger($fragments[1]); 22*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 23*04fd306cSNickeau throw new ExceptionBadArgument("The pdf page number anchor seems to not be a number. Error: {$e->getMessage()}"); 24*04fd306cSNickeau } 25*04fd306cSNickeau } 26*04fd306cSNickeau } catch (ExceptionNotFound $e) { 27*04fd306cSNickeau // ok no page 28*04fd306cSNickeau } 29*04fd306cSNickeau parent::buildFromUrl($url); 30*04fd306cSNickeau return $this; 31*04fd306cSNickeau } 32*04fd306cSNickeau 33*04fd306cSNickeau public function getMime(): Mime 34*04fd306cSNickeau { 35*04fd306cSNickeau return Mime::create(Mime::PDF); 36*04fd306cSNickeau } 37*04fd306cSNickeau 38*04fd306cSNickeau function getFetchUrl(Url $url = null): Url 39*04fd306cSNickeau { 40*04fd306cSNickeau $url = parent::getFetchUrl($url); 41*04fd306cSNickeau if ($this->pageNumber !== null) { 42*04fd306cSNickeau $url->setFragment("page={$this->pageNumber}"); 43*04fd306cSNickeau } 44*04fd306cSNickeau return $url; 45*04fd306cSNickeau } 46*04fd306cSNickeau 47*04fd306cSNickeau /** 48*04fd306cSNickeau * @throws ExceptionNotFound 49*04fd306cSNickeau */ 50*04fd306cSNickeau function getPageNumber(): int 51*04fd306cSNickeau { 52*04fd306cSNickeau if ($this->pageNumber === null) { 53*04fd306cSNickeau throw new ExceptionNotFound("No page number"); 54*04fd306cSNickeau } 55*04fd306cSNickeau return $this->pageNumber; 56*04fd306cSNickeau } 57*04fd306cSNickeau 58*04fd306cSNickeau} 59