C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: フレームの表示について


(過去ログ 56 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■31776 / inTopicNo.1)  フレームの表示について
  
□投稿者/ Webは初 (1回)-(2009/01/28(Wed) 15:40:48)

分類:[ASP.NET (VB)] 

いつも参考にさせていただいております。

IEの上部分に各コントロールを配置、下部分はPdfを表示し、
下部分だけ上下にスクロールさせられるというWebページを作
ろうとしています。

環境はVS2008(ASP.NET)です。
framesetタグは使えないということで、masterpageを使って
やろうとしたのですが、なぜかPdfがIE全体に表示され
masterpageでセットしたコントロールなどが表示されません。

page_loadで以下のコードをよんでおります。

----------------------------------------------------------
Dim sPath As String = "c:\"
Dim sFile As String = "RFP資料.pdf"

Response.Buffer = True
Response.Clear()
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "Application/pdf"
Response.AddHeader("Content-Disposition", "attachment;filename=c:\RFP資料.pdf")

Dim fs As IO.FileStream
Dim br As IO.BinaryReader

fs = New FileStream(sPath & sFile, FileMode.Open)
br = New BinaryReader(fs)

Dim rb As Byte() = br.ReadBytes(fs.Length - 1)

Response.BinaryWrite(rb)
br.Close()
fs.Close()
Response.End()
----------------------------------------------------------

改善策はあるのか、あるいは仕様をみたすための代替案があればお教えください。
長文申し訳ありません。よろしくお願いいたします。
引用返信 編集キー/
■31851 / inTopicNo.2)  Re[1]: フレームの表示について
□投稿者/ biac (28回)-(2009/01/29(Thu) 13:56:47)
biac さんの Web サイト
※ レスが付かないですねぇ。 「分類:[ASP.NET (VB)]」 と言われてますが、 そのへんとはあまり関係無い問題ですし… f(^^;


No31776 (Webは初 さん) に返信
> IEの上部分に各コントロールを配置、下部分はPdfを表示し、
> 下部分だけ上下にスクロールさせられるというWebページを作
> ろうとしています。

IE で表示するのですよね。
ということは、 IE に届くデータ ( html ソース ) が、 どうなってるかが問題。

そのへん、 理解されてますか?
「IEの上部分に各コントロールを配置」 という 「コントロール」 は、 ASP.NET の開発環境ではコントロールとして見えていますが、 ブラウザにそのコントロールが届いてるわけではありません。


> 環境はVS2008(ASP.NET)です。
> framesetタグは使えないということで、masterpageを使って
> やろうとしたのですが、なぜかPdfがIE全体に表示され
> masterpageでセットしたコントロールなどが表示されません。

まず、単純な マスターページ + コンテンツページ を作って、 IE で表示して見てください。
そうしたら、 IE に届いている HTML ソースを見てください。 そこにマスターページとコンテンツページの区別はありますか?

マスターページは、 frameset や iframe の代わりにはなりません。


> page_loadで以下のコードをよんでおります。
>
> ----------------------------------------------------------
> Dim sPath As String = "c:\"
> Dim sFile As String = "RFP資料.pdf"
>
> Response.Buffer = True
> Response.Clear()
> Response.ClearContent()
> Response.ClearHeaders()
> Response.ContentType = "Application/pdf"
> Response.AddHeader("Content-Disposition", "attachment;filename=c:\RFP資料.pdf")
>
> Dim fs As IO.FileStream
> Dim br As IO.BinaryReader
>
> fs = New FileStream(sPath & sFile, FileMode.Open)
> br = New BinaryReader(fs)
>
> Dim rb As Byte() = br.ReadBytes(fs.Length - 1)
>
> Response.BinaryWrite(rb)
> br.Close()
> fs.Close()
> Response.End()
> ----------------------------------------------------------

Response.End()
http://msdn.microsoft.com/ja-jp/library/system.web.httpresponse.end.aspx
…を呼び出した時点で、 そこまでに書き出したデータだけがブラウザに返信されます。
つまり、 aspx の内容はまったく返信されません。 この場合は、 "RFP資料.pdf" の内容だけが、 ブラウザに届きます。
# ぉ、ここだけは ASP.NET の話だ f(^^;


さて。

・HTML の 1ページ ( つまり、 1つの HTTP リクエスト/レスポンス ) で、 複数のコンテンツをまとめて返すことはできません。
つまり、 HTML のテキストデータと PDF のバイナリデータを 1回で返すことは不可能です。
※ IE8 からは、 そうでもなくなっていきますけどね。

・ブラウザからの 1回のリクエストに対して、 PDF データだけを返すことは、 すでに出来ていますね。 (提示していただいたコード)

・では、 実存する PDF ファイルを HTML のページ内に取り込んで表示する方法を研究してみてください。 それができれば、 あとは、 PDF ファイル名のところを、 PDF データを返してくれる aspx の url に書き換えるだけです。
参考:
http://www.keiyu.com/doc/pdflink.htm#03
> WWWブラウザでのPDFの表示について 〜 HTML文書にPDF文書を埋め込むには
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-21172.htm
> スレッド: データを保存できなくさせる方法


なお、 Response.BinaryWrite() を使った開発をするなら、 Web サーバからのレスポンスを生で見る方法を会得しておいた方がいいですよ。
Proxomitron
http://ja.wikipedia.org/wiki/Proxomitron
http://www.pluto.dti.ne.jp/~tengu/proxomitron/download.html
のようなローカルプロキシを噛ますのが常套手段です。
引用返信 編集キー/
■32146 / inTopicNo.3)  Re[2]: フレームの表示について
□投稿者/ 初心者? (7回)-(2009/02/02(Mon) 12:41:38)
biac 様

ご回答ありがとうございます。
まだまだ勉強不足だということがよくわかりました。。。^^;;;

参考URLを見て勉強させていただきます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -