Проблемы с Zend Framework PDF

Это я снова, ребята, у меня есть небольшая проблема:

// Create new PDF $pdf = new Zend_Pdf(); // Add new page to the document $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); $pdf->pages[] = $page; // Set font $page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 20); // Draw text $page->drawText('Hello world!', 100, 510); $this->getResponse() ->setHeader('Content-Disposition', 'attachment; filename=result.pdf') ->setHeader('Content-type', 'application/x-pdf'); echo $pdf->render(); 

Когда я загружаю файл и пытаюсь его открыть, я получаю сообщение об ошибке, которое звучит так:

ошибка формата: не PDF или поврежден

Мой вопрос: что я делаю неправильно?

Если вы попытаетесь открыть файл с помощью текстового редактора (или шестнадцатеричного редактора), что вы получите?

Ваш файл PDF должен содержать только данные PDF, а не HTML или пустое пространство в начале или в конце.

Одной вещью, которая может вызвать проблемы, является автоматическое рендеринг представления по 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()); } 

Насколько я помню, это работало отлично пару месяцев назад; и единственные отличия от вашего кода:

  • отключение макета / рендеринга
  • использование логотипа; но это не должно делать большой разницы

Надеюсь это поможет ; Повеселись!