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
精彩评论