[置顶] ZendFramework1.0 PDF开发中-Nesting level too deep的解决
来源:互联网 发布:人工智能能否代替老师 编辑:程序博客网 时间:2024/06/01 08:01
<?phpdefine("PHPVERSION",5) ; //PHP版本 -- 避免兼容性的问题define('L',dirname(__FILE__) ) ;//将当前路径加到PHP的全局路径中去$sep = WINDOWS ? ';' : ':'; ini_set("include_path","./ZendLib{$sep}".ini_get('include_path')); ini_set("include_path","./{$sep}".ini_get('include_path')); require('Zend.php');Zend::dump($_REQUEST);Zend::loadClass('Zend_Pdf');$pdf = new Zend_Pdf();$pdf->save("chomp.pdf");?>
报出嵌套太深的错误,很郁闷啊,在家里不能上网没法找,现在找到.
修正: Zend\Pdf\ElementFactory.php文件中 267行如下所示
public function markAsModified(Zend_Pdf_Element_Object $obj) { if ($obj->getFactory() !== $this) { //!= to !== throw new Zend_Pdf_Exception('Object is not generated by this factory'); } $this->_modifiedObjects[$obj->getObjNum()] = $obj; }
将 != 改为 !==
对对象的比较,应该用严格的比较符来比
== 换成 ===
!= 换成 !==
等等...
例如:
写道
false == 0 ; // true
false === 0 ; //false
false === 0 ; //false
参见: http://www.bigroom.co.uk/blog/php-nesting-level-too-deep-recursive-dependency
在这里说下PDF的创建,一般的工具在图片的效果上给人很不好的感觉,而ZF PDF创建很简单,效果也不错,这里就给出一个实例,和ZF 1.0的代码,以后说不定用得着,大家..
为什么选择ZF1.0 因为ZF1.8实在越来越大,很无聊的很...
<?phpdefine("PHPVERSION",5) ; //PHP版本 -- 避免兼容性的问题define('L',dirname(__FILE__) ) ;//将当前路径加到PHP的全局路径中去$sep = WINDOWS ? ';' : ':'; ini_set("include_path","./ZendLib{$sep}".ini_get('include_path')); ini_set("include_path","./{$sep}".ini_get('include_path')); require('Zend.php');Zend::dump($_REQUEST);Zend::loadClass('Zend_Pdf');$fileName = './chomp.pdf' ;if(file_exists($fileName)){ $pdf = Zend_Pdf::load($fileName);}else { $pdf = new Zend_Pdf();}/* $page = new Zend_Pdf_Page(Zend_Pdf_Const::PAGESIZE_LETTER);$pageHeight = $page->getHeight();$pageWidth = $page->getWidth();echo 'Height = '.$pageHeight.'<BR/>';echo 'Width = '.$pageWidth.'<BR/>';$pdf->pages[0] = ($page); *///$page = new Zend_Pdf_Page(Zend_Pdf_Const::PAGESIZE_LETTER_LANDSCAPE);$page = new Zend_Pdf_Page('1070:842:');$chompImage = new Zend_Pdf_Image_JPEG(L . '/ext-fck.jpg');$pageHeight = $page->getHeight();$pageWidth = $page->getWidth();$imageHeight = 437;$imageWidth = 1070;$topPos = $pageHeight - 36;$leftPos = 36;$bottomPos = $topPos - $imageHeight;$rightPos = $leftPos + $imageWidth;$page->drawImage($chompImage, $leftPos, $bottomPos, $rightPos, $topPos);$pdf->pages[0] = ($page);$pdf->save($fileName);?>
具体的代码在附件中,另外说句,这个压缩包中的上述错误已经修复... 这里给出一个图例,咱们也可以提供电子书生成的功能了,呵呵.... 感觉这个比JAVA的IText生成PDF还简单,就是还没有测试过延迟处理的问题...
另一个压缩文件来自于这里:
http://bbs.phpres.com/viewthread.php?tid=5412&extra=page%3D1&authorid=0&page=1