- - PR -
PDFの出力とページの表示変更を一度のレスポンスで行いたいです。
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-05 19:05
こんばんは。
ASP.NET2.0(VB)とActiveReportsのPDF出力を使っています。 ActiveReportsのサンプルコードを見ながら、 With m_page .Response.Clear() .Response.ClearHeaders() .Response.ClearContent() .Response.ContentType = "application/pdf" .Response.AddHeader("content-disposition", "attachment; filename=abc.pdf") objPdf.Export(pdffile.Document, objStream) .Response.BinaryWrite(objStream.ToArray) .Response.End() End With のようなコードで、PDFの出力を行っています。 これでPDFの出力自体はうまくいくのですが、 同時にページの表示内容を変更することができません。 上記のコードの前にページの内容を変更するコード(例えば、ラベルに表示する文字を変えるなど)書いて、 .Response.Clear() .Response.ClearHeaders() .Response.ClearContent() の部分をコメントアウトしてもだめでした。 .Response.End() のところをコメントアウトにすると、 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 とのエラーになってしまいます。 質問の仕方が下手ですみません。 PDFの出力を行いながら、同時にページの表示内容の変更も反映させるには、 どうすればよいのでしょうか。 漠然とした質問の仕方になってしまって、本当にすみません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-04-05 19:49
ボタンのポストバックの前に Javascript で PDF 出力用のサブウインドウを開き、
その後ポストバックするようにしてはどうでしょうか。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-04-05 20:36
お返事ありがとうございます。
>ボタンのポストバックの前に Javascript で PDF 出力用のサブウインドウを開き、 >その後ポストバックするようにしてはどうでしょうか。 たまにダウンロード画面とかで小さなウィンドウが出たりしますが、 あれはそういうことだったのですか。 どういう仕組みなのか、今ひとつわかっていないのですが、 ボタンにAttributes.Addか何かで、PDFを呼び出す画面を開くJavaScriptを記述して、 一方で、ボタンの処理もするといった感じでしょうか。 ただ、これだと少し問題があるのではないかと思っています。 (私の推測が間違っていたらすみません) 実は、ボタンを押した際にデータベースの登録処理を行い、その結果をPDFに表示しています。(その時に、ページの方で、前の操作で表示されているメッセージなどを消したいのです。 ですので、データベースへの登録処理が必ず先に終わっていないといけないのです。 すみません。良いアドバイスを頂いたのに。(これはこれですごく役に立つアドバイスなのですが) | ||||||||
|
投稿日時: 2007-04-05 23:29
そうですね。 ご指摘の通り並列に動作するので更新を保障できません。 そうなると、 ポストバック→更新→ページロードでサブウインドウを開いてPDF表示 とすれば表示できると思いますが、少し動きが気に食わないかもしれません。 他には ASP.NET AJAX を使用して ボタンクリック→更新、表示の更新→サブウインドウを開いてPDF表示 とすれば実現できそうです。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-04-06 09:25
ありがとうございます。
>ポストバック→更新→ページロードでサブウインドウを開いてPDF表示 >とすれば表示できると思いますが、少し動きが気に食わないかもしれません。 >他には ASP.NET AJAX を使用して >ボタンクリック→更新、表示の更新→サブウインドウを開いてPDF表示 >とすれば実現できそうです。 ASP.NET AJAXですか。 言葉だけは聞いたことがありますが・・・。 道筋は、少し開けたような気がします。 私に実現できるかどうかは別として・・・。 週末は、書籍とサンプル探しの旅になりそうです・・・。 | ||||||||
|
投稿日時: 2007-04-06 09:40
自分で例に挙げておいてなんですが、プロジェクトの途中からこういった技術を導入するのはあまりお勧めできません。 まずは最初にあげた例をもとにサンプルを作成してみてはどうでしょうか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-04-06 10:30
ありがとうございます。
ASP.NET AJAXは勉強用に置いておいて。 最初に紹介して頂いた方法で考えたのですが、 データベースへの登録がされたかどうかのフラグをSessionに入れて、サブウィンドウはループでそれを監視して(無限ループにならないように注意して)、登録が完了したことを確認したら、PDFの出力を開始するのはどうかなと思いました。 ただ、これだと、登録に失敗した場合にJavascriptでサブウィンドウを閉じるようにすると、 「ウィンドウが閉じられる」旨のメッセージボックスが出てしまうような。 メッセージボックスを出さずにサブウィンドウを閉じられればよいのですが。 | ||||||||
|
投稿日時: 2007-04-06 10:53
私であれば、まず登録ボタンなどを押したタイミングで PostBack し、DB への登録とページの内容を書き換えて新しいページを出力までを行います。 そしてその PostBack 後の新しいページに RegisterClientScript メソ ッドなりを利用して、JavaScript で page の onload あたりに新しいウ ィンドウを開くスクリプトを追加します。 新しいウィンドウは PDF を出力するための別の aspx ファイルを開くよう にしておいて、その aspx ファイル内では登録済みの DB の内容を読み 込んで PDF を出力する、といった感じです。 この方法は以前実際に使った方法ですが(ASP.NET 1.0 の頃なので RegisterClientScriptBlock メソッドを使いました)基本的な考え方はそ のままで応用できると思います。
どうもこのあたりを拝見すると、Web システムについての勉強をもう少しさ れた方が良いのでは…と老婆心ながら思ってしまいました。 (できれば HTTP の基礎からやるのがいいですが、そこまで掘り下げる 必要もないかもしれません) _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 |
1|2|3
次のページへ»