- PR -

PDFの出力とページの表示変更を一度のレスポンスで行いたいです。

投稿者投稿内容
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-04-10 17:54
ひろれいさんの発言から、やはり PDF ファイルが壊れている可能性も否
めないのかなぁという気もしてきました。
とは言え、.Response.BinaryWrite() の中身を確認するのはちょっと難
しそうなので、保存した PDF ファイルをバイナリエディタなどで開いてみる
のが一番手頃そうです。
正常な PDF ファイルであれば、"%PDF-***" というような文字列が先
頭に入っていると思われますが、保存した PDF ファイルはどうなっている
でしょうか。
<HTML> などの文字列が入っているのであれば、BinaryWrite の前に
行っている .Clear() .ClearHeaders() .ClearContent() が怪しそう
な気がします(自分は使ったことがなかったので、ちょっと気になる程度で
はありますが)。多少壊れた PDF ファイルでも、Adobe Viewer は正常
に表示してくれるので気づきにくいのかもしれません。
これは可能性の一つで、実際は正しいファイルが作成されているのかもし
れませんけどね。

カッコがないのは模写しそこねたのだと思っていましたが…
(VB.NET だからカッコいらないんだっけ?と思っていたのはここだけの秘密)

引用:

やよいさんの書き込み (2007-04-10 16:42) より:

どうも、一旦ページが表示されないとダメなようです。
サブウィンドウに隠しボタンを付けて、bodyのonLoadイベントで、
Javascriptを使ってそのボタンを押してやり、
ボタン押下イベントでPDFを出力するとうまく表示されます。
でも、それだと、そのサブウィンドウが消せなくなってしまいます・・・。


私の勘違いもあって、少々混乱させてしまっているかもしれません。
(申し訳ないです)

サブウィンドウを開くという記述をしたのは、そのサブウィンドウに PDF ファ
イルを表示するためでした。今回は inline ではなく attachment なので、
サブウィンドウを開く必要はないはずです。
ただし、一度ポストバックを行って、画面の内容を書き換えた HTML を出
力後、JavaScript の onLoad イベントで PDF 出力用のリクエストを送
るような感じになると思います。
イメージはこんな風。

コード:

a.aspx
 ↓ポストバック
a.aspx
 ↓onLoad イベントで b.aspx へリクエストを送る
b.aspx (PDF 出力)

b.aspx は PDF を出力するだけなので、ブラウザの画面上は a.aspx のまま


ポストバック後の a.aspx から、またポストバックを行う場合を考えて、こ
んな感じのコードになるのではないかと(未確認)。

コード:

<body  onload="document.forms["pdfout"].submit();">
<form method="post" action="〜">
〜〜ASP.NETの出力〜〜
</form>
<form method="post" action="b.aspx" name="pdfout">
</form>


onload 部分は当然ながら用が済んだら出力しないようにしなければなり
ません。

こうして書くと説明がヘタなのがもろバレでかなり恥ずかしいのですが、わ
かりますでしょうか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
やよい
常連さん
会議室デビュー日: 2007/03/31
投稿数: 22
投稿日時: 2007-04-10 18:28
ありがとうございます。
%PDF-から始まっていたので、PDF自体は問題なさそうです。

>こうして書くと説明がヘタなのがもろバレでかなり恥ずかしいのですが、わ
>かりますでしょうか。
とんでもないです。親切にサンプルコードまで付けて頂いて。
わかりやすいです。
やってみます。
何か、皆さんに背中を押して頂いてるみたいで、感謝しきりです。
やよい
常連さん
会議室デビュー日: 2007/03/31
投稿数: 22
投稿日時: 2007-04-10 21:11
ぽぴ王子さんに示して頂いたアドバイスを頼りにやったら、
やっと私の思っていた動きが出来るようになりました。
助かりました。
本当にありがとうございました。

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