I have a question, how can I do something like this:
header("Content-Disposition: inline; filename=result.pdf");
header("Content-type: application/x-pdf");
With Zend Framework, I have tried:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
But doesn't work correctly.
Best Regards,
I had a header set. It was not set, but ADDED. So I had a Content-Type of text/html and also application/pdf.
Flagging the Content-Type with TRUE made the download possible in IOS and other devices which showed only cryptic symbols after the download or an error:
->setHeader('Content-type', 'application/x-pdf', true);
setHeader($name, $value, $replace = false)
from: https://framework.zend.com/manual/1.12/de/zend.controller.response.html
Solved
My guess is that you're doing something like:
or something.
The response here will never be rendered (which renders the headers). The response is rendered during post-action printing, usually.
You will have to directly set the headers (as you noted in the non-oo code), or use
$this->getResponse()->sendHeaders()
directly.Late to the table, I can recommend this action helper as a simple, reusable component for sending files or in memory data to the browser.
Has options for caching, disposition and can utilise Apache Sendfile
Your statement to set the response headers is slightly malformed:
The above should work - please note the difference in the
Content-Disposition
-header.By the way... When you want to force a download box (instead of loading the document in the browser) you should use the
Content-Disposition
attachment
.Depending on the browser it may be possible that you also have to set the
Content-Length
or change theContent-type
to a combination (multiple headers) of one or more ofapplication/force-download
,application/octet-stream
and/orapplication/download
. And as I wrote in the comment sometimes caching headers may interfere with your download. Check to see which caching-headers are sent.