Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phortune/pdf/PhabricatorPDFObject.php
- This file was added.
<?php | |||||
abstract class PhabricatorPDFObject | |||||
extends PhabricatorPDFFragment { | |||||
private $generator; | |||||
private $objectIndex; | |||||
private $children = array(); | |||||
private $streams = array(); | |||||
final public function hasRefTableEntry() { | |||||
return true; | |||||
} | |||||
final protected function writeFragment() { | |||||
$this->writeLine('%d 0 obj', $this->getObjectIndex()); | |||||
$this->writeLine('<<'); | |||||
$this->writeObject(); | |||||
$this->writeLine('>>'); | |||||
$streams = $this->streams; | |||||
$this->streams = array(); | |||||
foreach ($streams as $stream) { | |||||
$this->writeLine('stream'); | |||||
$this->writeLine('%s', $stream); | |||||
$this->writeLine('endstream'); | |||||
} | |||||
$this->writeLine('endobj'); | |||||
} | |||||
final public function setGenerator( | |||||
PhabricatorPDFGenerator $generator, | |||||
$index) { | |||||
if ($this->getGenerator()) { | |||||
throw new Exception( | |||||
pht( | |||||
'This PDF object is already registered with a PDF generator. You '. | |||||
'can not register an object with more than one generator.')); | |||||
} | |||||
$this->generator = $generator; | |||||
$this->objectIndex = $index; | |||||
foreach ($this->getChildren() as $child) { | |||||
$generator->addObject($child); | |||||
} | |||||
return $this; | |||||
} | |||||
final public function getGenerator() { | |||||
return $this->generator; | |||||
} | |||||
final public function getObjectIndex() { | |||||
if (!$this->objectIndex) { | |||||
throw new Exception( | |||||
pht( | |||||
'Trying to get index for object ("%s") which has not been '. | |||||
'registered with a generator.', | |||||
get_class($this))); | |||||
} | |||||
return $this->objectIndex; | |||||
} | |||||
final protected function newChildObject(PhabricatorPDFObject $object) { | |||||
if ($this->generator) { | |||||
throw new Exception( | |||||
pht( | |||||
'Trying to add a new PDF Object child after already registering '. | |||||
'the object with a generator.')); | |||||
} | |||||
$this->children[] = $object; | |||||
return $object; | |||||
} | |||||
private function getChildren() { | |||||
return $this->children; | |||||
} | |||||
abstract protected function writeObject(); | |||||
final protected function newStream($raw_data) { | |||||
$stream_data = gzcompress($raw_data); | |||||
$this->streams[] = $stream_data; | |||||
return strlen($stream_data); | |||||
} | |||||
} |