dポイントプレゼントキャンペーン実施中!

CGIの知識が全くなく、いろいろなサイトを参考にさせていただいています。
表現等が正しくないことがあるかもしれませんが、ご了承下さい。

htmlのsubmitからcgiを経由してpdfをダウンロードさせるように作成中です。
cgiは、下記Uページを参考にさせていただきました。
http://www.abe-tatsuya.com/web_prog/perl_cgi/con …

#実際の記述<-----------------------------------------------
#-- ダウンロードさせる元ファイル
$source = 'doc.pdf';
#-- 保存時のファイル名(デフォルト)
$filename = '申込書.pdf';

#-- HTTPヘッダ送信
print qq|Content-type: application/pdf\n|;
print qq|Content-Disposition: attachment; filename="$filename"\n|;
print qq|\n|;
#-- ファイルを読み込んで出力
open(FILE,"$source");
while(<FILE>){print;}
close(FILE);

#--------------------------------------------------------->

上記の結果、ダウンロードはできるのですが、
Acrobatのエラーで、「この文章を開くときにエラーが発生しました。ファイルが壊れています。修復できませんでした。」
というメッセージが表示されます。
PCを変えてみたりもしましたが、どのPCからダウンロードしても同じです。

ちなみに、ウェブサーバーへアップロードする前のpdfは、ちゃんと開きます。

何が原因なのでしょうか?

A 回答 (1件)

では、元のファイルと、ダウンロードしたファイルを、バイナリー比較可能なツールを使って比較してみてください。


おそらく、違ったものになっています。

ファイルをテキストモードで開いて、「1行」ずつ読み込んで(<FILE>)、 テキストモードで出力(print)しています。
テキストモードでバイナリファイルの読み書きをすると、「文字化け」を起すことがあります。
binmodeでバイナリーモードにしましょう。
<>はバイナリーには向かないので、 read等を使いましょう
http://perldoc.jp/func/read

このプログラムに無い部分や、サーバーの設定によっては、別の対策も必要かもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!