10

PDFドキュメントのクリックイベントをクライアントに通知するこのSOソリューションに従って、this.myPDF.submitForm( "localhost / Handler.ashx?r = 2を使用してPDFがクライアントによって送信されたときにクライアントに通知するにはどうすればよいですか? ) 働き?

PDFファイルはユーザーコントロール内に作成され、HTMLオブジェクトにレンダリングされます。

string container = ("<object data='/myfile.pdf' type='application/pdf'></object>");

PDFに添付されたJSファイルは次のように実行されます。

 var webClient = new WebClient();
 string htmlContent = webClient.DownloadString(fileurl + "pdf_script.js");
 PdfAction action = PdfAction.JavaScript(htmlContnent, pdfstamper.Writer);
 pdfstamper.Writer.SetOpenAction(action);

そして、jsファイルの内容:

this.disclosed = true;
if (this.external && this.hostContainer) {

function onMessageFunc(stringArray) {
     try {
          this.myPDF.submitForm("http://localhost/Handler.ashx?EmpNo=12345" + "#FDF", false);

        }
        catch (e) {

        }
    }
    function onErrorFunc(e) {
        console.show();
        console.println(e.toString());
    }
    try {
        if (!this.hostContainer.messageHandler);
        this.hostContainer.messageHandler = new Object();
        this.hostContainer.messageHandler.myPDF = this;
        this.hostContainer.messageHandler.onMessage = onMessageFunc;
        this.hostContainer.messageHandler.onError = onErrorFunc;
        this.hostContainer.messageHandler.onDisclose = function () { return true; };
    }
    catch (e) {
        onErrorFunc(e);
    }
}

submitForm呼び出しが行われると、PDFコンテンツ(フォームフィールド)が正常に保存され、次のようにしてアラートがPDFに表示されます。

message = "%FDF-1.2
                   1 0 obj
                   <<
                   /FDF
                   <<
                      /Status("Success!")
                   >>
                   >>
                   endobj
                   trailer
                   <</Root 1 0 R>>
           %%EOF");
return message;

私がやろうとしているのは、このクライアントから送信されたフォーム送信呼び出しの後にPDFをクライアントにコールバックさせることです。これは、アラートの形式ではなく、フォームが送信されたことをクライアントに確認する方法です。ホスト(コンテナ、iframe、オブジェクトなど)で関数をトリガーする方法。

4

1 に答える 1

5

あなたが使用したFDFの応答は私にはわからなかったので、私はあなたの質問から何か新しいことを学びました。私はPDFリファレンスでAcroJSリファレンスとFDF仕様を研究しましたが、今ではあなたのコードが何をするのかをよりよく理解しています。有難うございます。

PDFからのJavaScript呼び出しを使用してHTMLファイルでJavaScriptメッセージをトリガーする方法をすでに知っていると思います。HTMLとPDF間createMessageHandler()のJavaScript通信の記事を参照してください。

私はあなたの質問を次のように解釈します:「データの送信が成功した後にこのメソッドを呼び出すにはどうすればよいですか?」

この質問に対する解決策がある場合、JavaScriptが関係します。FDFファイルにJavaScriptを追加できるようですが、そのJavaScriptがHTMLと「通信」できるかどうかはわかりません。FDF応答から最初のPDFでJavaScript関数を呼び出すことができるかどうかはわかりません。可能であれば、/Statusエントリと同様のJavaScriptエントリをPDFに追加する必要があります。

このエントリの値は、次のような辞書です。

<<
/Before (app.alert\("before!"\))
/After (app.alert\("after"\))
/Doc [/MyDocScript1, (myFunc1\(\)),
      /MyDocScript2, (myFunc2\(\))
>>

あなたの場合、/Beforeキーと/Docキーを削除します。私はあなたがそれらを必要としないと思います、私は辞書を以下に減らします:

<<
/After (talkToHtml\(\))
>>

talkToHtml()PDFにすでに存在するメソッドはどこにありますか:

function talkToHtml() {
    var names = new Array();
    names[0] = "Success!";
    try{
        this.hostContainer.postMessage(names);
    }
    catch(e){
        app.alert(e.message);
    }
}

これがうまくいくかどうかはわかりません。自分で試したことはありません。私はスペックに基づいて答えています。

本当にFDFを使う必要があるのか​​わかりません。submitForm()メソッドにJavaScriptを追加してみましたか?何かのようなもの:

this.myPDF.submitForm({
    cURL: "http://localhost/Handler.ashx?EmpNo=12345",
    cSubmitAs: "FDF",
    oJavaScript: {
        Before: 'app.alert("before!")',
        After: 'app.alert("after")',
        Doc: ["MyDocScript1", "myFunc1()",
              "MyDocScript2", "myFunc2()" ]
    }
});

これは、FDFとして送信する場合にのみ機能します。HTMLクエリ文字列を送信した場合の解決策はないと思います。

あなたが何MyDocScript1を疑問に思っている場合MyDocScript2は:

Docは、ドキュメントの名前ディクショナリのJavaScriptエントリで定義されたスクリプトに追加される追加のJavaScriptスクリプトを定義する配列を定義します。配列には、ペアで編成された偶数の要素が含まれています。各ペアの最初の要素は名前であり、2番目の要素はその名前に対応するスクリプトを定義するテキスト文字列またはテキストストリームです。定義された各スクリプトは、名前ディクショナリですでに定義されているスクリプトに追加され、Beforeエントリで定義されたスクリプトが実行される前に実行されます。(ISO-32000-1表245)

これらすべてが実際に機能するかどうかはわかりません。どちらの方法でも教えてください。

于 2012-12-16T13:21:16.513 に答える