• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 9546
  • Last Modified:

Force a pdf file to download instead of opening.

Have a special case instance where I would like a visitor to be able to download a pdf form without the pdf file first opening in a new window.

What I have working:
straight html page (frames).
a link to name.pdf.
Using MS Frontpage

My only options for the pdf hyperlink were to have it open in the same page, specific frame, or new window.
And what seems to be a real puzzle is that I have security set on the pdf document to allow the filling in of form data, printing and saving, but nothing else.
If the user opens up the pdf in a new window and fills in any information on the form, it is saved to the pdf regardless of being on the web server???  the next user can open up the pdf and any information previously filled in, is right there still visible.

So, for my purposes with this pdf form, I need to force download instead of opening as a web page.

TIA,

kkohl
0
kkohl
Asked:
kkohl
1 Solution
 
ZylochCommented:
It's in how you send the headers. Check this page http://us4.php.net/manual/en/function.header.php and search for Content-Disposition for a PHP example.

The only other way to do this without a server-side scripting language is to zip up the pdf file.

Regards,
${Zyloch}
0
 
COBOLdinosaurCommented:
Download a file instead of opening it. IE only and assuming you have ASP capabilities:
<%@Language="JScript"%>
<%
var myFSO = new ActiveXObject("Scripting.FileSystemObject")
var objFile = myFSO.openTextFile(Server.MapPath("/path/somefile.pdf"));
var str = new String(objFile.readAll());
Response.ContentType = 'application/unknown';
Response.addHeader('content-disposition', 'attachment;filename=somefile.pdf');
Response.Write(str);
%>

Cd&
0
 
EsopoCommented:
I've come to the conclution that the best method is to just ask the users to right click the link and choose "save as". Of course that's not what you are looking for so I will suggest you use CobolDinosaur's method, or it's equivalent in any other server side scripting language like PHP, .NET, even Perl.

I don't think this can be done on the client side, check this link to see what I mean (and for code on how to do it in every server side language):
http://www.experts-exchange.com/Web/Web_Languages/HTML/Q_21073694.html

Best regards,

Esopo.
0
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
ZylochCommented:
It's not possible to do it completely client-side since downloading the pdf or displaying it is specific to each browser. You can do it server side using Cd's example or sending different page headers.

Regards,
${Zyloch}
0
 
stefanaichholzerCommented:
Why don't you just put the .pdf file into a .zip file?, .zip files can't be opened by the browser, so each time the user wants to download one he'll have to save it to the drive, no matter what...

Hope that works for you...

;)
0
 
Ahmed MerghaniSoftware EngineerCommented:
I've come to the conclution that the best method is to just ask the users to right click the link and choose "save as". Of course that's not what you are looking for so I will suggest you use CobolDinosaur's method, or it's equivalent in any other server side scripting language like PHP, .NET, even Perl.

I don't think this can be done on the client side, check this link to see what I mean (and for code on how to do it in every server side language):
0
 
kkohlAuthor Commented:
It's all in the headers, as Zyloch pointed out.  I did find a little clearer answer when digging a little deeper on the web.

I changed the file extension from .pdf to .fdf, and added the headers to account for the downloading of my file.

<meta http-equiv="Content-Type" content="application/vnd.fdf; name="%s.FDF"">
<meta http-equiv="Content-Disposition" content="attachment; filename="%s.FDF"">

The user can still choose to open the file from the current location but it is not automatic and the default button that is focused is the save button.  Also, it was verified that if the user opens the file from the site location, any form changes are not saved to that web location regardless if the user tries to or not.

This method answered all requirements.
0
 
kkohlAuthor Commented:
(yes, this method was the fix for IE, there are other headers for the different browsers)
Very clunky way if you ask me, but it was done in straight HTML, no asp or xml, no java, no perl...  and the bottom line is, it works.

Thanks all!

0
 
milkmon123Commented:
Hi There,

Here is what I would use...

<?php

header('Content-Type: application/save');
header('Content-Disposition: attachment; filename=<<<FILE NAME>>');
readfile(<<< ABSOLUTE PATH TO YOUR FILE >>>);

?>

Hope it helps

Matt Wilkes
0
 
debjitkCommented:
Matt Wilkes is right you can force to download a file without displaying but adding specific headers.

Debjit Kar
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now