Force Download PDF Problem


G

gaubo79

I am wishing to force the Open|Save dialog box for a PDF and Excel
file.

I am using the following code:

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" +
saveFilename );
Response.Flush();
Response.WriteFile(savePath);

While this works perfect for the Excel file, however, the PDF file does
not open, whether direct from the dialog box or by saving it to disk
and opening it, I get the following error in Adobe Acrobat Reader (v5.0
& v7.0):

"There was an error opening this document. The file is damaged and
could not be repaired."

The original PDF file is okay. Also, the size of the original PDF is
50k, where as the one that is downloaded to the client is 237k.

I have tried various other things such as creating a FileStream and
using Response.BinaryWrite, and various other ContentTypes, including
application/pdf.

Has anyone had this before, or know of a workaround? Ideally I would
like the dialog box to always appear for this pdf.
 
Ad

Advertisements

R

RCS

I know you're looking for something helpful - but I can say, that looks 100%
correct.. so if nothing else, it doesn't appear to be anything obvious. Good
luck
 
E

Edwin Knoppert

1) Use ClearHeaders() and ClearContents() CH is imo important for
authentication issues.
2) Response.End really seems to flush, Response.Flush seems not enough.
3) Not using Response.end seems to be a problem on localhost only so far.

I ran across the R.E issue yesterday,.
Odd, i was trying to avoid this end.
 
J

Joey

If, by some chance, you have entered an IIS->asp.net mapping for PDF
documents, delete it. The problem will go away. This happened to me
when I tried to add a mapping so as to allow for asp.net to control
security on PDF documents.
 
G

gaubo79

Joey,

I certainly haven't entered one, is there anyway it could be there by
default?

I had a look through IIS manager, but couldn't find anything, where
would it be if it was in place?

Thanks
 
G

gaubo79

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType="application/octet-stream";
Response.AddHeader("content-disposition","attachment; filename=" +
saveFilename);
Response.WriteFile(savePath);
Response.End();

This works fine, many thanks.
 
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top