PDF hostContainer обратный вызов

После этого решения SO здесь чтобы уведомить клиентов о событии щелчка в документе PDF, как можно уведомить клиента, когда файл PDF отправляется клиентом с помощью this.myPDF.submitForm ("localhost /Handler.ashx? r = 2) функция?

Файл PDF создается внутри пользовательского элемента управления, а затем визуализируется в объект HTML:

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

Файл JS, прикрепленный к PDF-документу, выглядит следующим образом:

 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, объект ... и т. д.).

7 голосов | спросил Maya 12 WedEurope/Moscow2012-12-12T13:49:20+04:00Europe/Moscow12bEurope/MoscowWed, 12 Dec 2012 13:49:20 +0400 2012, 13:49:20

1 ответ


0

Ответ FDF, который вы использовали, был мне неизвестен, поэтому я узнал кое-что новое из вашего вопроса. Я изучил Справочник AcroJS и спецификацию FDF в Справочнике PDF, и теперь я лучше понимаю, что делает ваш код. Спасибо за это.

Я предполагаю, что вы уже знаете, как вызвать сообщение JavaScript в файле HTML, используя вызов JavaScript из PDF. См. createMessageHandler() в JavaScript Связь между HTML и PDF статья.

Я интерпретирую ваш вопрос следующим образом: «Как вызвать этот метод после успешной отправки данных?»

Если есть решение этого вопроса, оно будет включать JavaScript. Я вижу, что можно добавить JavaScript в файл FDF, но я не уверен, что этот JavaScript может «общаться» с HTML. Я не уверен, можно ли вызвать функцию JavaScript в исходном PDF-файле из ответа FDF. Если это возможно, вам следует добавить в файл PDF запись JavaScript, аналогичную записи /Status.

Значением этой записи является словарь, что-то вроде:

<<
/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. Вы пытались добавить 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.

Если вам интересно, что MyDocScript1 и MyDocScript2:

  

Doc определяет массив, определяющий дополнительные сценарии JavaScript, которые должны быть   добавлено к определенным в записи JavaScript имени документа   толковый словарь. Массив содержит четное количество элементов, организованных   в парах. Первый элемент каждой пары - это имя, а второй   текстовая строка или текстовый поток, определяющий скрипт, соответствующий   на это имя. Каждый из определенных сценариев добавляется к уже   определяется в словаре имен, а затем выполняется перед сценарием   определено в записи До. (ISO-32000-1 Таблица 245)

Я не уверен, что все это сработает на практике. Пожалуйста, дайте мне знать в любом случае.

ответил Bruno Lowagie 16 SunEurope/Moscow2012-12-16T17:21:16+04:00Europe/Moscow12bEurope/MoscowSun, 16 Dec 2012 17:21:16 +0400 2012, 17:21:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132