Zend Framework PDF sorunlar

1 Cevap php

Yine adamlar bana, ben küçük bir sorun var:

    	// 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();

Ben dosyayı indirmek ve açmak için çalıştığınızda, ben bu gibi sesler bir hata alıyorum:

format hatası: bir PDF veya bozuk

Benim soru: What i'm doing wrong?

1 Cevap

Eğer bir metin editörü (veya bir onaltılık editörü) ile dosyayı açmaya çalışırsanız, ne alabilirim?

PDF dosyası başında veya sonunda herhangi bir HTML veya boşluk sadece PDF verileri içeren ve olmamalıdır.

One thing that could cause troubles is the automatic rendering of a View by Zend Framework.
Using something like this at the beginning of your action might help :

$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();


I've looked at a sample I wrote sometime action, and it's the only difference I see with what you did, actually...


If it still doesn't work, what if you try saving the PDF to a file instead of sending it to the user ? With something like that, for instance :

$pdf->save(CACHE_DIR . '/test-pdf.pdf');

Ben size ne yapmak istediğinizi değil, biliyorum; ama siz PDF iyi oluşturulan ise sorun PDF nesil olup olmadığını belirlemek için, kontrol ya da çıkış var ile sağlayacak.


Ve burada bahsettiğim tam örnek:

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

Gibi Hatırladığım kadarıyla, bu birkaç ay önce gayet iyi çalışıyordu; ve kod ile tek farkları:

  • düzen / render devre dışı
  • Bir logosunu kullanarak; ama bu kadar fark yapmamalısınız


Hope this helps ; Have fun!