Это я снова, ребята, у меня есть небольшая проблема:
// 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()); }
Насколько я помню, это работало отлично пару месяцев назад; и единственные отличия от вашего кода:
Надеюсь это поможет ; Повеселись!