本文整理汇总了PHP中Zend_Pdf_Element_Reference_Table::addReference方法的典型用法代码示例。如果您正苦于以下问题:PHP Zend_Pdf_Element_Reference_Table::addReference方法的具体用法?PHP Zend_Pdf_Element_Reference_Table::addReference怎么用?PHP Zend_Pdf_Element_Reference_Table::addReference使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend_Pdf_Element_Reference_Table
的用法示例。
在下文中一共展示了Zend_Pdf_Element_Reference_Table::addReference方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _loadXRefTable
/**
* Load XReference table and referenced objects
*
* @param integer $offset
* @throws Zend_Pdf_Exception
* @return Zend_Pdf_Trailer_Keeper
*/
private function _loadXRefTable($offset)
{
$this->_pushContext();
$this->_current = $offset;
$refTable = new Zend_Pdf_Element_Reference_Table();
$context = new Zend_Pdf_Element_Reference_Context($this, $refTable);
$this->_currentContext = $context;
$nextLexeme = $this->_readLexeme();
if ($nextLexeme == 'xref') {
/**
* Common cross-reference table
*/
$this->_skipWhiteSpace();
while (($nextLexeme = $this->_readLexeme()) != 'trailer') {
if (!ctype_digit($nextLexeme)) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference table subheader values must contain only digits.', $this->_current - strlen($nextLexeme)));
}
$objNum = (int) $nextLexeme;
$refCount = $this->_readLexeme();
if (!ctype_digit($refCount)) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference table subheader values must contain only digits.', $this->_current - strlen($refCount)));
}
$this->_skipWhiteSpace();
while ($refCount > 0) {
$objectOffset = substr($this->_pdfString, $this->_current, 10);
if (!ctype_digit($objectOffset)) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Offset must contain only digits.', $this->_current));
}
// Force $objectOffset to be treated as decimal instead of octal number
for ($numStart = 0; $numStart < strlen($objectOffset) - 1; $numStart++) {
if ($objectOffset[$numStart] != '0') {
break;
}
}
$objectOffset = substr($objectOffset, $numStart);
$this->_current += 10;
if (!self::isWhiteSpace(ord($this->_pdfString[$this->_current]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_current));
}
$this->_current++;
$genNumber = substr($this->_pdfString, $this->_current, 5);
if (!ctype_digit($objectOffset)) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Offset must contain only digits.', $this->_current));
}
// Force $objectOffset to be treated as decimal instead of octal number
for ($numStart = 0; $numStart < strlen($genNumber) - 1; $numStart++) {
if ($genNumber[$numStart] != '0') {
break;
}
}
$genNumber = substr($genNumber, $numStart);
$this->_current += 5;
if (!self::isWhiteSpace(ord($this->_pdfString[$this->_current]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_current));
}
$this->_current++;
$inUseKey = $this->_pdfString[$this->_current];
$this->_current++;
switch ($inUseKey) {
case 'f':
// free entry
unset($this->_refTable[$objNum . ' ' . $genNumber . ' R']);
$refTable->addReference($objNum . ' ' . $genNumber . ' R', $objectOffset, false);
break;
case 'n':
// in-use entry
$refTable->addReference($objNum . ' ' . $genNumber . ' R', $objectOffset, true);
}
if (!self::isWhiteSpace(ord($this->_pdfString[$this->_current]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_current));
}
$this->_current++;
if (!self::isWhiteSpace(ord($this->_pdfString[$this->_current]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_current));
}
$this->_current++;
$refCount--;
$objNum++;
}
}
$trailerDictOffset = $this->_current;
$trailerDict = $this->_readElementalObject();
if (!$trailerDict instanceof Zend_Pdf_Element_Dictionary) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Dictionary expected after \'trailer\' keyword.', $trailerDictOffset));
}
$trailerObj = new Zend_Pdf_Trailer_Keeper($trailerDict, $context);
if ($trailerDict->Prev instanceof Zend_Pdf_Element_Numeric || $trailerDict->Prev instanceof Zend_Pdf_Element_Reference) {
$trailerObj->setPrev($this->_loadXRefTable($trailerDict->Prev->value));
$context->getRefTable()->setParent($trailerObj->getPrev()->getRefTable());
}
/**
* We set '/Prev' dictionary property to the current cross-reference section offset.
* It doesn't correspond to the actual data, but is true when trailer will be used
//.........这里部分代码省略.........
示例2: _loadXRefTable
private function _loadXRefTable($offset)
{
$this->_stringParser->offset = $offset;
$refTable = new Zend_Pdf_Element_Reference_Table();
$context = new Zend_Pdf_Element_Reference_Context($this->_stringParser, $refTable);
$this->_stringParser->setContext($context);
$nextLexeme = $this->_stringParser->readLexeme();
if ($nextLexeme == 'xref') {
$this->_stringParser->skipWhiteSpace();
while (($nextLexeme = $this->_stringParser->readLexeme()) != 'trailer') {
if (!ctype_digit($nextLexeme)) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference table subheader values must contain only digits.', $this->_stringParser->offset - strlen($nextLexeme)));
}
$objNum = (int) $nextLexeme;
$refCount = $this->_stringParser->readLexeme();
if (!ctype_digit($refCount)) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference table subheader values must contain only digits.', $this->_stringParser->offset - strlen($refCount)));
}
$this->_stringParser->skipWhiteSpace();
while ($refCount > 0) {
$objectOffset = substr($this->_stringParser->data, $this->_stringParser->offset, 10);
if (!ctype_digit($objectOffset)) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Offset must contain only digits.', $this->_stringParser->offset));
}
for ($numStart = 0; $numStart < strlen($objectOffset) - 1; $numStart++) {
if ($objectOffset[$numStart] != '0') {
break;
}
}
$objectOffset = substr($objectOffset, $numStart);
$this->_stringParser->offset += 10;
if (strpos("\t\n\f\r ", $this->_stringParser->data[$this->_stringParser->offset]) === false) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_stringParser->offset));
}
$this->_stringParser->offset++;
$genNumber = substr($this->_stringParser->data, $this->_stringParser->offset, 5);
if (!ctype_digit($objectOffset)) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Offset must contain only digits.', $this->_stringParser->offset));
}
for ($numStart = 0; $numStart < strlen($genNumber) - 1; $numStart++) {
if ($genNumber[$numStart] != '0') {
break;
}
}
$genNumber = substr($genNumber, $numStart);
$this->_stringParser->offset += 5;
if (strpos("\t\n\f\r ", $this->_stringParser->data[$this->_stringParser->offset]) === false) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_stringParser->offset));
}
$this->_stringParser->offset++;
$inUseKey = $this->_stringParser->data[$this->_stringParser->offset];
$this->_stringParser->offset++;
switch ($inUseKey) {
case 'f':
unset($this->_refTable[$objNum . ' ' . $genNumber . ' R']);
$refTable->addReference($objNum . ' ' . $genNumber . ' R', $objectOffset, false);
break;
case 'n':
$refTable->addReference($objNum . ' ' . $genNumber . ' R', $objectOffset, true);
}
if (!Zend_Pdf_StringParser::isWhiteSpace(ord($this->_stringParser->data[$this->_stringParser->offset]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_stringParser->offset));
}
$this->_stringParser->offset++;
if (!Zend_Pdf_StringParser::isWhiteSpace(ord($this->_stringParser->data[$this->_stringParser->offset]))) {
throw new Zend_Pdf_Exception(sprintf('PDF file cross-reference table syntax error. Offset - 0x%X. Value separator must be white space.', $this->_stringParser->offset));
}
$this->_stringParser->offset++;
$refCount--;
$objNum++;
}
}
$trailerDictOffset = $this->_stringParser->offset;
$trailerDict = $this->_stringParser->readElement();
if (!$trailerDict instanceof Zend_Pdf_Element_Dictionary) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Dictionary expected after \'trailer\' keyword.', $trailerDictOffset));
}
} else {
$xrefStream = $this->_stringParser->getObject($offset, $context);
if (!$xrefStream instanceof Zend_Pdf_Element_Object_Stream) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference stream expected.', $offset));
}
$trailerDict = $xrefStream->dictionary;
if ($trailerDict->Type->value != 'XRef') {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross-reference stream object must have /Type property assigned to /XRef.', $offset));
}
if ($trailerDict->W === null || $trailerDict->W->getType() != Zend_Pdf_Element::TYPE_ARRAY) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross reference stream dictionary doesn\'t have W entry or it\'s not an array.', $offset));
}
$entryField1Size = $trailerDict->W->items[0]->value;
$entryField2Size = $trailerDict->W->items[1]->value;
$entryField3Size = $trailerDict->W->items[2]->value;
if ($entryField2Size == 0 || $entryField3Size == 0) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Wrong W dictionary entry. Only type field of stream entries has default value and could be zero length.', $offset));
}
$xrefStreamData = $xrefStream->value;
if ($trailerDict->Index !== null) {
if ($trailerDict->Index->getType() != Zend_Pdf_Element::TYPE_ARRAY) {
throw new Zend_Pdf_Exception(sprintf('PDF file syntax error. Offset - 0x%X. Cross reference stream dictionary Index entry must be an array.', $offset));
}
//.........这里部分代码省略.........