PDF hostContainer回调(PDF hostContainer callback)

2019-07-05 00:15发布

在此之后SO解决此通知单击事件的客户PDF文档中,怎么可能当PDF被使用this.myPDF.submitForm(“本地主机/ Handler.ashx?R = 2的客户端提交通知客户端)功能?

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,对象...等)。

Answer 1:

您所使用的FDF反应是不认得我,所以我学会了从你的问题新的东西。 我研究了AcroJS参考,并在PDF参考的FDF规范,现在我有一个更好的了解你的代码做什么。 谢谢你的。

我假设你已经知道如何使用从PDF的JavaScript调用来触发一个HTML文件中的JavaScript消息。 见createMessageHandler()在HTML和PDF之间的JavaScript通信的文章。

我理解你的问题是:“如何我成功提交数据后,调用此方法”

如果有这个问题的解决方案,这将涉及的JavaScript。 我看到一个可以在FDF文件添加JavaScript,但我不知道如果JavaScript可以“说话” HTML。 我不知道,如果你可以在你从FDF响应初始PDF调用JavaScript函数。 如果有可能,你应该添加一个JavaScript进入到您的PDF类似/状态条目。

本项的值是一个字典,是这样的:

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

在你的情况,我会删除/和/文件密钥之前。 我不认为你需要的时候,我会减少字典:

<<
/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。 您是否尝试添加JavaScript到您的submitForm()方法? 就像是:

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查询字符串。

如果你想知道什么MyDocScript1MyDocScript2是:

文件定义了一个数组定义附加JavaScript脚本的要被添加到那些在文档的名称词典的JavaScript的条目定义。 该阵列包含偶数个元件,在对组织的。 每对的第一个元素是一个名称,第二个是定义对应于该名称的脚本的文本字符串或文本流。 该定义的脚本中的每一个加入到那些在名称词典已经定义并执行在之前条目中定义的脚本之前执行。 (ISO-32000-1的表245)

我不知道如果这一切都将在实际工作中。 请让我知道无论哪种方式。



文章来源: PDF hostContainer callback