Zend Framework PDF проблемы - PullRequest
       9

Zend Framework PDF проблемы

3 голосов
/ 25 августа 2009

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

        // 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 или поврежден

Мой вопрос: Что я делаю не так?

1 Ответ

5 голосов
/ 25 августа 2009

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

Ваш файл 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());
}

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

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...