- PR -

ASP.NETでPDFを表示するには?

投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-11-19 18:48
お世話になっております。
ASP.NETでPDFをサーバからストリームして出力、ブラウザに表示させたいのですが、うまくいきません。

実行すると何故か「ファイルのダウンロード」というダイアログが表示されてしまうんです。(以下)
-----------------------------------------------------------
ファイルによってはコンピュータに問題を・・・(略)

ファイル名:hoge.aspx(実行したASP.NETのファイル名)
ファイルの種類:ASP.NET Server Page
発信元:localhost

ファイルを開くか、ファイルをコンピュータに保存するか選択してください。
[開く] [保存] [キャンセル] [詳細情報]
-----------------------------------------------------------

テストはPersonalWebServerで行っています。hoge.aspxというファイルを作ってその中でPDFを出力するメソッドを実行しています。
PDFはResponse.OutputStreamに出力されるようにしています。
MIMEタイプをPDFにすることもやっています。
Response.ContentType = "application/pdf";

上記のダイアログで保存を選び、ファイル名の拡張子をPDFに変更して実行すると期待したPDFファイルが表示されますので、PDF出力は成功している模様です。ブラウザにPDFをPDFとして認識してブラウザ上で表示してもらうことに失敗しているようなんです。
ブラウザにPDFを認識してもらうのにはContentTypeの設定以外に何かやらなければならないことがあるのでしょうか?
どなたか調査方法とか手がかりでも結構ですので何かあれば教えてください。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-19 21:12
引用:

hiro-taさんの書き込み (2003-11-19 18:48) より:

上記のダイアログで保存を選び、ファイル名の拡張子をPDFに変更して実行すると期待したPDFファイルが表示されますので、PDF出力は成功している模様です。


 ファイル名の拡張子をpdfにしてやればいいのでは?方法は、過去ログにあるので検索してみてください。

Response.ApendHeader("Content-Disposition","inline;filename=" + HttpUtility.UrlEncode("ファイルのフルパス名");
かな?
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-11-20 09:42
>ファイル名の拡張子をpdfにしてやればいいのでは?方法は、過去ログにあるので検索してみてください。
>
>
試してみましたが、ダメでした。
ファイルダウンロードのダイアログが表示されて内容が

ファイル名:hoge.pdf
ファイルの種類:PDFファイル

に変わっただけでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-25 18:55
すみません、見落としていました。

引用:

hiro-taさんの書き込み (2003-11-20 09:42) より:

試してみましたが、ダメでした。
ファイルダウンロードのダイアログが表示されて内容が

ファイル名:hoge.pdf
ファイルの種類:PDFファイル

に変わっただけでした。



 後は、クライアントの設定ではないでしょうか。
普通のエクスプローラのツール→フォルダオプション→ファイルの種類→PDFタブにある、「ダウンロード後に常に開くように設定する」
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-11-26 08:32
そもそもファイルの種類が「Adobe Acrobat 文書」となるべきところ、
引用:

hiro-taさんの書き込み (2003-11-20 09:42) より:
ファイルの種類:PDFファイル


のように表示されること自体、何か変な気がするのですが……。

クライアントに、AcrobatあるいはAcrobat Readerが、ちゃんとインストールされていますか?
もしくはファイルの関連付けが、ぐちゃぐちゃになってるとか……。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2003-11-26 08:32 ]
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-11-26 09:49
> 後は、クライアントの設定ではないでしょうか。
>普通のエクスプローラのツール→フォルダオプション→ファイルの種類→PDFタブにある、
>「ダウンロード後に常に開くように設定する」
>
試しましたが何も変わりませんでした。
また上記の設定は行っていなくても、例えばどこかのサイトでPDFファイルへのリンクをクリックするとIE上にPDFが表示されます。

>そもそもファイルの種類が「Adobe Acrobat 文書」となるべきところ、
>
ごめんなさい。今確認したところ
Adobe Acrobat Document
になっていました。


>クライアントに、AcrobatあるいはAcrobat Readerが、ちゃんとインストールされています
>か?
>もしくはファイルの関連付けが、ぐちゃぐちゃになってるとか……。
>
正常にインストールしています。
テストは2台で行っていて両方のマシンで今回の現象が発生しております。
また、そのうちの1台はほとんど使っていないきれいな状態ですので関連づけがおかしくなったり、OSが不安定な状態になったりということはないと思います。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-11-26 13:24
hiro-taさん、こんにちは。
こんな感じでどうですか?

コード:
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.AppendHeader("Content-Disposition", "inline")
Response.AppendHeader("Content-Transfer-Encoding", "base64")

'Response.OutputStream への書込み

Response.Flush()
Response.End()


hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-11-26 13:58
できました!
きくちゃんさん、ありがとうございます。

>Response.Clear()
>Response.Buffer = True
>Response.ContentType = "application/pdf"
>Response.AppendHeader("Content-Disposition", "inline")
>Response.AppendHeader("Content-Transfer-Encoding", "base64")
>
>Response.Flush()
>Response.End()
>
全部やったほうが良いのかもしれませんが、とりあえずひとつひとつ試していった
ところ、
>Response.Flush()

>Response.End()
のどちらかを最後に行えばうまくいくようです。

あきらめかけていたので本当に助かりました。皆さん、どうもありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)