1

私が知っている奇妙な質問ですが、IFrame もあるページの非表示フィールド内に PDF バイトデータが含まれていると言います。

IFrame が Adob​​e プラグインにロードされてデータが表示されるように、JavaScript を使用して PDF データを IFrame に書き込む方法はありますか?

これを行う理由は、非表示フィールドに PDF データが必要なためです。ユーザーがボタンをクリックすると、データを使用して JS を介して Java アプレットを呼び出し、PDF バイト データを独自のシステムに書き込むことができます。 . PDFも表示したいと思います。

そう:

  1. 非表示フィールドにチャッキングされた PDF バイト データ (サーバー上で生成)。
  2. 隠しフィールドからの PDF バイト データは、間もなく発見される StackOverflow JS マジックによってクライアント側で IFrame に書き込まれ 、表示されます。
  3. ボタンがクリックされたとき Java アプレットがクライアント側で呼び出され、非表示フィールドに格納された PDF バイト データを渡します。

サウスパークのアンダーパンツ ノームのように、フェーズ 1 と 3 がありますが、フェーズ 2 はありません!

どんなアイデアもありがたく受け取った!

詳細情報:

JS 呼び出しを介して Java アプレットに渡されるように、クライアント側でバイト データを使用できるようにする必要があります。現在、これは非表示フィールドを介して行われています。それは大丈夫です、それはうまく動作します。

問題は、ajax モーダル ダイアログの OK ボタンがクリックされた場合にのみアプレットの呼び出しが行われることです (「このドキュメントを UglyProprietorySystem に送信しますか?」)。

ご存じのとおり、Adobe プラグイン ディスプレイの上には何も配置できません。明らかに、ページ全体が PDF タイプの場合、JS がダイアログを表示する場所がないため、それは機能しません。また、IFrame を使用する場合、プラグインが表示するものの上に何も置くことはできません (それは事実上、別のアプリの領空と違反することは、まったく失礼です!)。

私たちはこれを次の方法で回避しました。

  1. 一般的な PDF ドキュメントのぼやけた画像を最初に表示し、その上にモーダル ダイアログをポップします。
  2. ユーザーがダイアログに応答したとき、hiden フィールドからの pdf バイト データを使用して Java アプリを呼び出しました (または呼び出しませんでした)。
  3. 次に、非表示フィールドをクリアした後にポストバックしました (Woo! PDF バイナリ データを含むフォームをポストバックすると、サーバーは認識しません!)
  4. コード ビハインドの page_load では、ポストバック時に、応答ストリームに PDF バイト データを書き込み、contenttype を appplication/pdf に設定して、pdf を表示します。

素晴らしい。それはすべて機能し、私たちが望むものを手に入れます。

唯一の問題は、次のいずれかを行う必要があることです。

* generate the PDF data twice (once on initital page_load for the clientside call to our applet and then again on postback to display).

また

* We store the PDF byte data in the session after the first response so as to be able to, after the postback, still have the pdf data to be able to display it.

どちらも素晴らしいものではありませんが、私たちは後者を採用しましたが、今はできればそれを避けたいと考えています.

したがって、PDF を生成し、非表示フィールドに配置し、アプレット呼び出しを介して PDF を独自のシステムに保存するボタンをページに配置し、クライアントの非表示フィールドに既にそのデータを使用して IFrame に書き込むというアイデアしたがって、それを表示します。

ふぅ!

そのため、JS を使用するクライアントで、pdf バイナリ データを IFrame に書き込み、そのコンテンツ タイプを application/pdf に設定して、ブラウザが adobe プラグインをロードして表示するようにしたいと考えました。

4

6 に答える 6

2

いいえ、Web 側のセキュリティ サンドボックスでこの種のことを可能にするインターフェイスはありません。サーバーからPDFをダウンロードするだけではない理由は何ですか?...

于 2009-06-23T15:58:09.693 に答える
1

質問で述べたように、サーバー上で既に PDF データを生成しています。

JS 呼び出しを介して Java アプレットに渡されるように、クライアント側でバイト データを使用できるようにする必要があります。現在、これは非表示フィールドを介して行われています。それは大丈夫です、それはうまく動作します。

問題は、アプレットの呼び出しが ajax モーダル ダイアログの [OK] ボタンをクリックした場合にのみ行われることです (「このドキュメントを UglyProprietorySystem に送信しますか?」)。

ご存じのとおり、Adobe プラグイン ディスプレイの上には何も配置できません。明らかに、ページ全体が PDF タイプの場合、JS がダイアログを表示する場所がないため、それは機能しません。また、IFrame を使用する場合、プラグインが表示するものの上に何も置くことはできません (それは事実上、別のアプリの領空と違反することは、まったく失礼です!)。

私たちはこれを次の方法で回避しました。

  1. 一般的な PDF ドキュメントのぼやけた画像を最初に表示し、その上にモーダル ダイアログをポップします。
  2. ユーザーがダイアログに応答したとき、hiden フィールドからの pdf バイト データを使用して Java アプリを呼び出しました (または呼び出しませんでした)。
  3. 次に、隠しフィールドをクリアした後にポストバックしました (Woo! PDF バイナリ データを含むフォームをポストバックすると 、サーバーは認識しません!)
  4. コード ビハインドの page_load では、ポストバック時に、応答ストリームに PDF バイト データを書き込み、contenttype を appplication/pdf に設定して、pdf を表示します。

素晴らしい。それはすべて機能し、私たちが望むものを手に入れます

唯一の問題は、次のいずれかを行う必要があることです。

  • PDF データを 2 回生成します (1 回目はクライアント側でアプレットを呼び出すための最初の page_load で、2 回目はポストバックで表示します)。

また

  • 最初の応答後に PDF バイト データをセッションに保存し、ポストバック後も表示できるように PDF データを保持できるようにします。

どちらも素晴らしいものではありませんが、私たちは後者を採用しましたが、今はできればそれを避けたいと考えています.

したがって、PDF を生成し、非表示フィールドに配置し、アプレット呼び出しを介して PDF を独自のシステムに保存するボタンをページに配置し、クライアントの非表示フィールドに既にそのデータを使用して IFrame に書き込むというアイデアしたがって、それを表示します。

ふぅ!

そのため、JS を使用するクライアントで、pdf バイナリ データを IFrame に書き込み、そのコンテンツ タイプを application/pdf に設定して、ブラウザが adobe プラグインをロードして表示するようにしたいと考えました。

于 2009-06-23T16:39:47.117 に答える
1

最近これを調査したサイトを見つけることができないようですが、MOST ブラウザー (IE8 を含み、以前の IE バージョンでは制限されていました) でサポートされている機能があり、データを指定できます: URI の src フィールドiframe (および多くの場合、他のタグも)。基本的に、uri は src='data:application/pdf;Base64,;' の行に沿っています。

ブラウザ間で互換性を持たせるには、おそらくフォーマットをいじる必要がありますが、開始する場所を提供するはずです.

于 2009-06-23T16:46:37.540 に答える
0

post または get を介して定期的に最終ファイルの存在を確認するためのコールバック関数をクライアントに作成できなかったのはなぜですか? ブラウザで「サムネイル」画像をポイントし、投稿を開始して最終ファイルを取得し、ファイルの準備が整うまでエラーを飲み込みます。ファイルが利用可能になると、クライアントは単純にそれをダウンロードします。

于 2009-06-23T16:47:14.810 に答える
0

「object」要素を使用して、PDF データを「data」パラメーターに入れます。

JS で PDF を作成することについてはよくわかりませんが、可能であることはわかっていますが、ライブラリで簡単に利用できるわけではありません。

http://support.microsoft.com/kb/201515を参照してください。MS KB 記事には、次の例が示されています。

<OBJECT ID="myCtrl" WIDTH=50 HEIGHT=50
 CLASSID="CLSID:nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn"
 DATA="DATA:application/x-oleobject;BASE64,j43aWGqdGxCvwEIQECqNpy
           FDNBIIAAAA7QMAAO0DAACAfuHmAgAFADEAAAAQ">
</OBJECT>

これを行う前に、ブラウザのサポートを調べます。IE8は強制アップデートになったので、より良いサポートがあるはずですが、IEやFF、Safariなどでの経験から言えません.

于 2009-07-22T21:21:51.120 に答える