Если вы попытаетесь открыть файл с помощью текстового редактора (или шестнадцатеричного редактора), что вы получите?
Ваш файл PDF должен содержать только данные PDF, а не HTML или пробел в начале или конце.
Одна вещь, которая может вызвать проблемы, - это автоматическое рендеринг View в Zend Framework.
Использование чего-то подобного в начале вашего действия может помочь:
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
Я посмотрел пример, который я когда-то написал, и это единственное отличие, которое я вижу с тем, что ты сделал, на самом деле ...
Если это все еще не работает, что если вы попытаетесь сохранить PDF в файл вместо того, чтобы отправить его пользователю? С чем-то вроде этого, например:
$pdf->save(CACHE_DIR . '/test-pdf.pdf');
Я знаю, что это не то, что вы хотите сделать; но это позволит вам проверить, правильно ли создан PDF, определить, связана ли проблема с генерацией PDF или с его выводом.
А вот полный пример, о котором я говорил:
public function pdfAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$pdf = new Zend_Pdf();
$pdf->properties['Title'] = "TITLE";
$pdf->properties['Author'] = "AUTHOR";
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$width = $page->getWidth(); // A4 : 595
$height = $page->getHeight(); // A4 : 842
$imagePath = WEB_DIR . '/images/logo.png';
$image = Zend_Pdf_Image::imageWithPath($imagePath);
$x = 15;
$y = $height - 15 - 106/2;
$page->drawImage($image, $x, $y, $x+155/2, $y+106/2);
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 36);
$page->drawText('Hello world!', 72, 720, 'UTF-8');
$pdf->pages[] = $page;
$this->getResponse()->setHeader('Content-type', 'application/x-pdf', true);
$this->getResponse()->setHeader('Content-disposition', 'inline; filename=my-file.pdf', true);
$this->getResponse()->setBody($pdf->render());
}
Насколько я помню, пару месяцев назад все работало нормально; и единственные различия с вашим кодом:
- отключение макета / рендеринга
- с использованием логотипа; но это не должно иметь большого значения
Надеюсь это поможет ; Веселись!