/** * @param IndirectObject $indirectObject * @return ObjectInterface */ public function getObject(IndirectObject $indirectObject) { if ($indirectObject->getObjectStorage() !== $this) { throw new DomainException('Object storage of indirect object must equal this object storage'); } return $this->objects[$indirectObject->getId()]; }
/** * Writes all objects. * * @param SplFileObject $fileObject * @return array */ private function writeObjects(SplFileObject $fileObject) { $objectOffsets = []; foreach ($this->objects as $object) { $indirectObject = $this->objects->getIndirectObject($object); $id = $indirectObject->getId(); $objectOffsets[] = $fileObject->ftell(); $fileObject->fwrite(sprintf("%d 0 obj\n", $id)); $key = null; if (null !== $this->encrypt && $id !== $this->encrypt->getId()) { $key = substr(hex2bin(md5($this->encryptionKey . substr(pack('V', $id), 0, 3) . substr(pack('V', $indirectObject->getGeneration()), 0, 2))), 0, min(16, strlen($this->encryptionKey) + 5)); } $object->writeToStream($fileObject, $key); $fileObject->fwrite("\nendobj\n"); } return $objectOffsets; }