2012-10-11 106 views
0

我有一個腳本,在Zend中生成一個PDF。我將從轉換圖像到PDF的腳本複製到服務器上的另一個目錄。我現在得到的錯誤:pdf一代不工作框架Zend

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(); 
    } 
+0

只需添加生成錯誤的代碼。 – janenz00

+0

附加代碼 – Wojtek

回答

2

Zend_Pdf_Image :: imageWithPath需要一個有效的文件並使用is_file函數調用來檢查文件是否存在。

首先,使用圖像的絕對路徑,而不是使用相對路徑。您可以通過引用APPLICATION_PATH來指定絕對路徑。例如,

APPLICATION_PATH . '/../public/data 

如果APPLICATION_PATH不是已經在你的代碼中定義的,在你的公共/ index.php文件

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

然後,檢查「數據/'.$ GET粘貼此代碼[ 'id']。'/ crop'。$ _ GET ['id']。'。jpg'存在。另外,請檢查文件是否具有適當的權限以供PHP訪問。

注意:使用Zend request object而不是$ _GET。

+0

什麼是數據文件夾的絕對路徑? – janenz00

+0

嘗試給/ kalendarz/data/0116b4/crop_0116b4。jpg作爲參數imageWithPath – janenz00

+0

此外,檢查文件是否具有讀取權限,爲apache用戶 – janenz00

0

使用絕對路徑:

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

或:

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

您可能還希望把小號在$_GET['id']上進行驗證。

+0

'$ imagePath ='/ kalendarz /'.$_ GET ['id']。'/ crop _'。$ _ GET ['id']。'jpg';' 同樣的錯誤 '注意:使用未定義的常量APPLICATION_PATH - 在第42行的/kalendarz/cms.php中假定'APPLICATION_PATH' APPLICATION_PATH/data/0116b4/crop_0116b4.jpg致命錯誤:未捕獲的異常'Zend_Pdf_Exception' 。文件未找到。'在/kalendarz/Zend/Pdf/Resource/ImageFactory.php:38堆棧跟蹤:#0 /kalendarz/Zend/Pdf/Image.php(124):Zend_Pdf_Resource_ImageFactory :: factory('APPLICATION_PAT ...')#1/kalendarz /cms.php(44): .....' 第二種方式 – Wojtek

+0

'$ _GET ['id']'正確 – Wojtek

+0

您確定路徑正確嗎?你說你已經移動了服務器,所以也許在新服務器上有所不同。 –