开发者

Can't get Zend pdf show in browser

I've got a strange problem with zend pdf, I just can't get the pdf to show in my action i've got this code:

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

$pdf = new Zend_Pdf('path/to/file.pdf');

$this->getResponse()->setHeader('Content-type', 'application/x-pdf', true);
$this->getResponse()->setHeader('Content-disposition', 'inline; filename=filetrace.pdf', true);
$this->getResponse()->setBody($pdf->render());

Zend creates this stacktrace:

#0 E:\SRVApps\Zend\ZendServer\share\ZendFramework\library\Zend\Pdf.php(303): Zend_Pdf_Parser->__construct('http://example...', Object(Zend_Pdf_ElementFactory_Proxy), false)
#1 E:\wwwroot\test\htdocs\application\modules\dashboard\controllers\FileController.php(171): Zend_Pdf->__construct('http://example...')
#2 E:\SRVApps\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(513): Dashboard_FileController->showAction()
#3 E:\SRVApps\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(289): Zend_Controller_Action->dispatch('showAction')
#4 E:\SRVApps\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#5 E:\SRVApps\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#6 E:\SRVApps开发者_如何学Python\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#7 E:\wwwroot\test\htdocs\public\index.php(26): Zend_Application->run()
#8 {main}

When creating an new pdf there is no problem

Does anybody have an idea?

Thanks


I realize this is an old question but I found the answer to this through trial and error. This is what my action looks like to get just the pdf to show up in the browser. This works in Chrome. I haven't tested it in any other browser.

    $this->_helper->viewRenderer->setNoRender();
    $this->_helper->layout()->disableLayout();
    $this->getResponse()
        ->setHeader('Content-Disposition', 'inline; filename=foo.pdf')
        ->setHeader('Content-type', 'application/pdf');
    $pdf = Zend_Pdf::load('/path/to/my.pdf');
    echo $pdf->render();


Method 1: Get the binary string outside of Zend_Pdf

$file = file_get_contents('path/to/file.pdf')
$pdf = new Zend_Pdf($file);

Method 2: Set the $load parameter true

$pdf = new Zend_Pdf('path/to/file.pdf', null, true);

Method 3: Use the static load-method

$pdf = Zend_Pdf::load('path/to/file.pdf');


In Magento 1.9, which uses Zend_Pdf, to render PDF in browser, the following works for me:

// In controller action
$filename = 'foo.pdf';
$pdf = Zend_Pdf::load('path/to/foo.pdf');
$content = $pdf->render();
$contentLength = strlen($content);

$this->getResponse()
    ->setHttpResponseCode(200)
    ->setHeader('Pragma', 'public', true)
    ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
    ->setHeader('Content-type', 'application/pdf', true)
    ->setHeader('Content-Length', $contentLength, true)
    ->setHeader('Content-Disposition', 'inline; filename="'.$filename.'"', true)
    ->setHeader('Content-Transfer-Encoding', 'binary', true)
    ->setHeader('Accept-Ranges', 'bytes', true)
    ->setBody($content);
// Exit controller action
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜