- - PR -
PDFの出力とページの表示変更を一度のレスポンスで行いたいです。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-10 14:47
こんにちは。
返答が遅くなってしまってすみません。 ご紹介して頂いた方法を使ってやってみました。 >私であれば、まず登録ボタンなどを押したタイミングで PostBack し、DB >への登録とページの内容を書き換えて新しいページを出力までを行います。 > >そしてその PostBack 後の新しいページに RegisterClientScript メソ >ッドなりを利用して、JavaScript で page の onload あたりに新しいウ >ィンドウを開くスクリプトを追加します。 > >新しいウィンドウは PDF を出力するための別の aspx ファイルを開くよう >にしておいて、その aspx ファイル内では登録済みの DB の内容を読み >込んで PDF を出力する、といった感じです。 そうしたら、PDF出力のダイアログが表示されるのですが、 開くを選択すると、「ファイルが見つかりません」とのエラーになってしまいます。 開くを選択せず、保存を選択し、一旦保存した後、そのファイルを開くと正しく表示されます。(ですので、PDFそのものは出来ているということ?) 出力の部分のコードは、前述の通り、 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 といった具合です。 何がいけないのでしょうか。 | ||||||||
|
投稿日時: 2007-04-10 15:06
いまさらながらですが、私がとった方法は別ウィンドウに PDF を表示させ
るやり方でした。PDF をダウンロードさせる場合とは少し事情が違うかもし れません。 ただ、その場合は新しいウィンドウを開かずに、PDF を出力するための aspx ファイルへリダイレクトしてやるなどの処理にすれば、なんとかなりそ うな気もします。えーとこの辺は手元に環境がないのでちょっと試せないの ですが(申し訳ないです)。
保存すれば大丈夫ということは、ファイル自体は正しく作成できていると思 われます。 気になるのは、Response.BinaryWrite のあとですぐに Response.End() を呼んでいるところでしょうか。 その前に Reponse.Flush() を入れてみてください。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-04-10 15:39
ちょっと気になったのですが、
「objStream.ToArray」には、正しい値が入っていますか? | ||||||||
|
投稿日時: 2007-04-10 15:56
ありがとうございます。
>Reponse.Flush() を入れてみてください。 やってみたのですが、うまくいきませんでした。 >「objStream.ToArray」には、正しい値が入っていますか? 他のページではこのコードでちゃんとPDFが出力されるので、 正しい値が入っていると思うのですが・・・。 他のページとの違いを考えてみると、 他のページの印刷ボタンは、PDFの出力だけを行っていて(なので、画面の更新の必要がない)、このページの印刷ボタンでは、画面の更新とPDFの出力を同時に行おうとしています。そこでサブウィンドウを表示させて、そのLoadイベントでPDF出力をさせようとしています。そうすると、ページの出力が終わる前に、PDFの出力を行っている状態になっているのではないのかなと考えています。 で、どうすればよいかまでは、考えが及ばないのでが・・・。 | ||||||||
|
投稿日時: 2007-04-10 16:20
「正しい値が入っていると思う」では、うまく動かないと思いませんか? まずは1つずつ確認していき、原因を特定するのがデバッグではありませんか? >開くを選択すると、「ファイルが見つかりません」とのエラーになってしまいます。 という状態では、まず最初に 「.Response.BinaryWrite(objStream.ToArray)」 を確認すると思いますが・・・ | ||||||||
|
投稿日時: 2007-04-10 16:42
すいません。
>「正しい値が入っていると思う」では、うまく動かないと思いませんか? Lengthとかを見て、中身が入っていることは確認しているのでうが、 それが正しい内容なのかどうかを、どうやって判断すればよいのかわからず、 入っていると思うとの返答になってしまいました。 どうも、一旦ページが表示されないとダメなようです。 サブウィンドウに隠しボタンを付けて、bodyのonLoadイベントで、 Javascriptを使ってそのボタンを押してやり、 ボタン押下イベントでPDFを出力するとうまく表示されます。 でも、それだと、そのサブウィンドウが消せなくなってしまいます・・・。 | ||||||||
|
投稿日時: 2007-04-10 17:16
ActiveReports は使ったことが無いので、トライアル版をインストールしてみました。
サンプルを見ると、
とあります。
この辺が気になりました。 | ||||||||
|
投稿日時: 2007-04-10 17:53
ありがとうございます。
わざわざインストールまでして頂いて、感謝と恐縮です。 確かに、()が抜けてました。 見落としていて、情けないです。 ただ、残念ながら、結果は変わらずです。 |