PDF を必ずファイルとしてダウンロードさせる
SPECIAL
Web サイトに PDF ファイルのリンクを用意して、そこから必ずダウンロードしてもらうための方法について調べてみました。
PDF ファイルを任意のフォルダーへダウンロードさせるようにする
Internet Explorer でどこかの Web サイト上の PDF ファイルを開くと、プラグインを用いてブラウザー画面上にその PDF ファイルの内容を表示しようとします。
これはこれで便利ではあるのですけれど、誰かに PDF をダウンロードしてもらいたい場合には、これだと相手がこれを保存する方法が分らずに困ってしまうこともあり、説明などの手間が余計に必要になってきたりします。
そこで、自動的にダウンロードさせるようにする方法はないか調べてみたところ、次のようにすることで、ファイルをダウンロードさせることができることが分りました。
HTTP でブラウザーと Web サーバーとがやりとりを行う場合、ヘッダーという情報を使用して、その詳細を相互に知らせることができるようになっています。
このヘッダーの中に、次のような内容を含めることにより、ブラウザーにこのコンテンツがダウンロードすべきものということを知らせることができるようでした。
Content-Disposition: attachment; filename="NAME.PDF"
このようにすることで、このコンテンツは "NAME.PDF" という名前の添付ファイルであることをブラウザーに告げます。
このヘッダーは PHP や ASP のようなスクリプトを用いて付加することができるので、その方法について以下に記していきたいと思います。
PHP でファイルをダウンロードさせる
PHP で PDF ファイルを強制的にダウンロードさせるプログラムは次のような感じです。
<?php
$Filename = 'sample.pdf';
$ContentType = 'application/pdf';
$TargetFile = fopen($Filename, 'rb');
if ($TargetFile)
{
header("Content-Type: $ContentType");
header("Content-Disposition: attachment; filename=$Filename");
while (!feof($TargetFile))
{
print fread($TargetFile, 1024);
}
fclose($TargetFile);
}
else
{
header('Status: 500 Internal Server Error');
header('Content-Type: text/plain');
print('Failed to open the file.');
}
?>
このような PHP ページを用意して、ダウンロードさせたいファイルと併せてサーバーへアップロードします。
このページをブラウザーで参照することで、PDF ファイルでもプラグインによる表示は行われず、ダウンロードする画面が表示されるようになります。
PHP スクリプト内の "$Filename" や "$ContentType" を調整すれば、Excel や画像など、その他のブラウザーで表示されるファイルでも、ダウンロードしてもらうことができるようになります。
ASP でファイルをダウンロードさせる
ASP で PDF ファイルを強制的にダウンロードさせるプログラムは次のような感じです。
<%
Const adTypeBinary = 1
Dim Filename
Dim ContentType
Dim BinStream
Filename = "sample.pdf"
ContentType = "application/pdf"
Set BinStream = Server.CreateObject("ADODB.Stream")
Call BinStream.Open
BinStream.Type = adTypeBinary
Call BinStream.LoadFromFile(Server.MapPath(Filename))
Response.buffer = TRUE
Response.ContentType = ContentType
Call Response.AddHeader("Content-Disposition", "attachment; filename=" & Filename)
Call Response.BinaryWrite(BinStream.Read)
Call BinStream.Close
Set BinStream = Nothing
Call Response.End
%>
このような ASP ページを用意して、ダウンロードさせたいファイルと併せてサーバーへアップロードします。
このページをブラウザーで参照することで、PDF ファイルでもプラグインによる表示は行われず、ダウンロードする画面が表示されるようになります。
ASP スクリプト内の "Filename" や "ContentType" を調整すれば、Excel や画像など、その他のブラウザーで表示されるファイルでも、ダウンロードしてもらうことができるようになります。