/** * Map the objects * * @return void */ protected function mapObjects() { foreach ($this->objectStreams as $stream) { switch ($this->getStreamType($stream)) { case 'root': $root = Object\RootObject::parse($stream); $root->setImported(true); $root->setVersion(substr($this->data, 5, 3)); $this->objectMap['root'] = ['stream' => $stream, 'object' => $root, 'index' => $root->getIndex(), 'parent' => $root->getParentIndex()]; break; case 'parent': $parent = Object\ParentObject::parse($stream); $parent->setImported(true); $this->objectMap['parent'] = ['stream' => $stream, 'object' => $parent, 'index' => $parent->getIndex(), 'count' => $parent->getCount(), 'kids' => $parent->getKids()]; break; case 'info': $info = Object\InfoObject::parse($stream); $info->setImported(true); $this->objectMap['info'] = ['stream' => $stream, 'object' => $info, 'index' => $info->getIndex()]; break; case 'page': if (!isset($this->objectMap['pages'])) { $this->objectMap['pages'] = []; } $page = Object\PageObject::parse($stream); $page->setImported(true); $this->objectMap['pages'][$page->getIndex()] = ['stream' => $stream, 'object' => $page, 'index' => $page->getIndex(), 'parent' => $page->getParentIndex(), 'width' => $page->getWidth(), 'height' => $page->getHeight(), 'content' => $page->getContent(), 'annots' => $page->getAnnots(), 'fonts' => $page->getFonts(), 'xObjects' => $page->getXObjects()]; break; case 'stream': if (!isset($this->objectMap['streams'])) { $this->objectMap['streams'] = []; } $stream = Object\StreamObject::parse($stream); $stream->setImported(true); $this->objectMap['streams'][$stream->getIndex()] = ['stream' => $stream, 'object' => $stream, 'index' => $stream->getIndex()]; break; } } }
/** * Get coordinates based on document origin * * @param int $x * @param int $y * @param Object\PageObject $pageObject * @return array */ protected function getCoordinates($x, $y, Object\PageObject $pageObject) { $coordinates = ['x' => $x, 'y' => $y]; $width = $pageObject->getWidth(); $height = $pageObject->getHeight(); switch ($this->document->getOrigin()) { case \Pop\Pdf\Document::ORIGIN_TOP_LEFT: $coordinates['y'] = $height - $y; break; case \Pop\Pdf\Document::ORIGIN_TOP_RIGHT: $coordinates['x'] = $width - $x; $coordinates['y'] = $height - $y; break; case \Pop\Pdf\Document::ORIGIN_BOTTOM_RIGHT: $coordinates['x'] = $width - $x; break; case \Pop\Pdf\Document::ORIGIN_CENTER: $coordinates['x'] = round($width / 2) + $x; $coordinates['y'] = round($height / 2) + $y; break; } return $coordinates; }