本文整理汇总了PHP中Zend_Pdf_ElementFactory_Interface::cleanEnumerationShiftCache方法的典型用法代码示例。如果您正苦于以下问题:PHP Zend_Pdf_ElementFactory_Interface::cleanEnumerationShiftCache方法的具体用法?PHP Zend_Pdf_ElementFactory_Interface::cleanEnumerationShiftCache怎么用?PHP Zend_Pdf_ElementFactory_Interface::cleanEnumerationShiftCache使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend_Pdf_ElementFactory_Interface
的用法示例。
在下文中一共展示了Zend_Pdf_ElementFactory_Interface::cleanEnumerationShiftCache方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: render
//.........这里部分代码省略.........
}
// offset (from a start of PDF file) of new PDF file segment
$offset = $this->_trailer->getPDFLength();
// Last Object number in a list of free objects
$lastFreeObject = $this->_trailer->getLastFreeObject();
// Array of cross-reference table subsections
$xrefTable = array();
// Object numbers of first objects in each subsection
$xrefSectionStartNums = array();
// Last cross-reference table subsection
$xrefSection = array();
// Dummy initialization of the first element (specail case - header of linked list of free objects).
$xrefSection[] = 0;
$xrefSectionStartNums[] = 0;
// Object number of last processed PDF object.
// Used to manage cross-reference subsections.
// Initialized by zero (specail case - header of linked list of free objects).
$lastObjNum = 0;
if ($outputStream !== null) {
if (!$newSegmentOnly) {
$pdfData = $this->_trailer->getPDFString();
while ( strlen($pdfData) > 0 && ($byteCount = fwrite($outputStream, $pdfData)) != false ) {
$pdfData = substr($pdfData, $byteCount);
}
}
} else {
$pdfSegmentBlocks = ($newSegmentOnly) ? array() : array($this->_trailer->getPDFString());
}
// Iterate objects to create new reference table
foreach ($this->_objFactory->listModifiedObjects() as $updateInfo) {
$objNum = $updateInfo->getObjNum();
if ($objNum - $lastObjNum != 1) {
// Save cross-reference table subsection and start new one
$xrefTable[] = $xrefSection;
$xrefSection = array();
$xrefSectionStartNums[] = $objNum;
}
if ($updateInfo->isFree()) {
// Free object cross-reference table entry
$xrefSection[] = sprintf("%010d %05d f \n", $lastFreeObject, $updateInfo->getGenNum());
$lastFreeObject = $objNum;
} else {
// In-use object cross-reference table entry
$xrefSection[] = sprintf("%010d %05d n \n", $offset, $updateInfo->getGenNum());
$pdfBlock = $updateInfo->getObjectDump();
$offset += strlen($pdfBlock);
if ($outputStream === null) {
$pdfSegmentBlocks[] = $pdfBlock;
} else {
while ( strlen($pdfBlock) > 0 && ($byteCount = fwrite($outputStream, $pdfBlock)) != false ) {
$pdfBlock = substr($pdfBlock, $byteCount);
}
}
}
$lastObjNum = $objNum;
}
// Save last cross-reference table subsection
$xrefTable[] = $xrefSection;
// Modify first entry (specail case - header of linked list of free objects).
$xrefTable[0][0] = sprintf("%010d 65535 f \n", $lastFreeObject);
$xrefTableStr = "xref\n";
foreach ($xrefTable as $sectId => $xrefSection) {
$xrefTableStr .= sprintf("%d %d \n", $xrefSectionStartNums[$sectId], count($xrefSection));
foreach ($xrefSection as $xrefTableEntry) {
$xrefTableStr .= $xrefTableEntry;
}
}
$this->_trailer->Size->value = $this->_objFactory->getObjectCount();
$pdfBlock = $xrefTableStr
. $this->_trailer->toString()
. "startxref\n" . $offset . "\n"
. "%%EOF\n";
$this->_objFactory->cleanEnumerationShiftCache();
if ($outputStream === null) {
$pdfSegmentBlocks[] = $pdfBlock;
return implode('', $pdfSegmentBlocks);
} else {
while ( strlen($pdfBlock) > 0 && ($byteCount = fwrite($outputStream, $pdfBlock)) != false ) {
$pdfBlock = substr($pdfBlock, $byteCount);
}
return '';
}
}
示例2: cleanEnumerationShiftCache
/**
* Clean enumeration shift cache.
* Has to be used after PDF render operation to let followed updates be correct.
*
* @param Zend_Pdf_ElementFactory_Interface $factory
* @return integer
*/
public function cleanEnumerationShiftCache()
{
return $this->_factory->cleanEnumerationShiftCache();
}