根据这个SO解决方案(在此处)来通知客户单击PDF文档中的事件,当客户使用this.myPDF.submitForm("localhost/Handler.ashx?r=2)函数提交PDF时,如何通知客户端呢?
PDF文件是在用户控件内创建,然后呈现为HTML对象:
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、object等。