pdf生成不在Zend框架中工作

时间:2012-10-11 23:34:51

标签: php zend-framework pdf-generation

我有一个在Zend中生成PDF的脚本。我将脚本从将图像转换为pdf复制到服务器上的另一个目录。我现在得到错误:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cannot create image resource. 
File not found.' in /kalendarz/Zend/Pdf/Resource/ImageFactory.php:38 
 Stack trace: 
 #0 /kalendarz/Zend/Pdf/Image.php(124): Zend_Pdf_Resource_ImageFactory::factory('data/0116b4/cro...') 
 #1 /kalendarz/cms.php(56): Zend_Pdf_Image::imageWithPath('data/0116b4/cro...') 
 #2 {main} thrown in /kalendarz/Zend/Pdf/Resource/ImageFactory.php on line 38

网站代码,图片示例链接(http://tinyurl.com/8srbfza):

else if($_GET['action']=='generate') {
    //1 punkt typograficzny postscriptowy (cyfrowy) = 1/72 cala = 0,3528 mm
    function mm_to_pt($size_mm) {
      return $size_mm/0.3528;
    }

    require_once("Zend/Pdf.php");

    $pdf = new Zend_Pdf(); 

    $page_w = mm_to_pt(100);
    $page_h = mm_to_pt(90);

    $page = $pdf->newPage($page_w.':'.$page_h.':'); 
    $pdf->pages[] = $page; 

    $imagePath= 'data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg'; //to nie jest miniaturka
    $image = Zend_Pdf_Image::imageWithPath($imagePath);


    $left = mm_to_pt(0);
    $right = mm_to_pt(100);
    $top = mm_to_pt(90);
    $bottom = mm_to_pt(0);

    $page->drawImage($image, $left, $bottom, $right, $top);     

    $pdfData = $pdf->render(); 

    header("Content-Disposition: inline; filename=".$_GET['id'].".pdf"); 
    header("Content-type: application/x-pdf"); 
    echo $pdfData; 
    die();
  }

2 个答案:

答案 0 :(得分:2)

Zend_Pdf_Image :: imageWithPath需要一个有效的文件并使用is_file函数调用来检查文件是否存在。

首先,使用图像的绝对路径,而不是使用相对路径。您可以通过引用APPLICATION_PATH指定绝对路径。例如,

  APPLICATION_PATH . '/../public/data

如果您的代码中尚未定义APPLICATION_PATH,请将此代码粘贴到您的public / index.php中

 defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

然后,检查'data /'.$ GET ['id']。'/ crop '。$ _ GET ['id']。'。jpg'存在。另外,检查文件是否具有PHP访问的适当权限。

注意:使用Zend request object代替$ _GET。

答案 1 :(得分:0)

使用绝对路径:

$imagePath = '/kalendarz/data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg';

或:

$imagePath = APPLICATION_PATH.'/../data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg';

您可能还想对$_GET['id']进行一些验证。