本文整理汇总了PHP中Zend_Pdf_Trailer::toString方法的典型用法代码示例。如果您正苦于以下问题:PHP Zend_Pdf_Trailer::toString方法的具体用法?PHP Zend_Pdf_Trailer::toString怎么用?PHP Zend_Pdf_Trailer::toString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend_Pdf_Trailer
的用法示例。
在下文中一共展示了Zend_Pdf_Trailer::toString方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: render
/**
* Render the completed PDF to a string.
* If $newSegmentOnly is true, then only appended part of PDF is returned.
*
* @param boolean $newSegmentOnly
* @return string
*/
public function render($newSegmentOnly = false)
{
$this->_dumpPages();
// Check, that PDF file was modified
// File is always modified by _dumpPages() now, but future implementations may eliminate this.
if (!$this->_objFactory->isModified()) {
if ($newSegmentOnly) {
return '';
} else {
return $this->_trailer->getPDFString();
}
}
// offset (from a start of PDF file) of new PDF file segment
$segmentOffset = $this->_trailer->getPDFLength();
// new PDF file segment itself
$pdfSegment = '';
// 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;
// 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", $segmentOffset + strlen($pdfSegment), $updateInfo->getGenNum());
$pdfSegment .= $updateInfo->getObjectDump();
}
$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;
}
}
$xrefStartOffset = $segmentOffset + strlen($pdfSegment);
$this->_trailer->Size->value = $this->_objFactory->getObjectCount();
$pdfSegment .= $xrefTableStr . $this->_trailer->toString() . "startxref\n" . $xrefStartOffset . "\n" . "%%EOF\n";
if ($newSegmentOnly) {
return $pdfSegment;
} else {
return $this->_trailer->getPDFString() . $pdfSegment;
}
}
示例2: 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 '';
}
}