Esri ArcGIS Распечатать карту

Я использую ArcGIS javaScript 3.5, и я хочу реализовать карту печати. ​​Я знаю, что это встроенный инструмент, который мы также можем использовать, но моя проблема в том, чтобы реализовать все три шага (Печать, Печать, PrintOut) одним щелчком мыши (Предпочитаю другой щелчок).

для этого я сделал что-то вроде ---

сначала я добавил один div на уровне дизайна и установил видимость как false

   <div id="print_button" style="visibility:hidden;display:none;"></div>

В инициализации я использую опцию esri.dijit.Print

        var app = {};
        app.webmapId = "8315cf7d20f0484e869c4791f70f4f15";
        app.printUrl = "abc/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task";

        var layouts = [{
            "name": "Letter ANSI A Landscape",
            "label": "Landscape (PDF)",
            "format": "pdf",
            "options": {
                "legendLayers": [], // empty array means no legend
                "scalebarUnit": "Miles",
                "titleText": "Map"
            }
        }];
        var templates = [];
        dojo.forEach(layouts, function (lo) {
            var t = new esri.tasks.PrintTemplate();
            t.layout = lo.name;
            t.label = lo.label;
            t.format = lo.format;
            t.layoutOptions = lo.options
            templates.push(t);
        });


        app.printer = new esri.dijit.Print({
            "map": map,
            "templates": templates,
            url: app.printUrl,
        }, dojo.byId("print_button"));
        app.printer.startup();

и в моем щелчке внутри я хочу нажать эту кнопку печати

function export1() { 
        document.getElementById('print_button').click();//This is not working obviously this is not a button        
        return false;
    }

Как я могу этого добиться. Помогите, пожалуйста.


После анализа этого div я нашел эти элементы

<div class="esriPrint">
<span class="dijit dijitReset dijitInline dijitButton esriPrintButton dijitButtonDisabled dijitDisabled" 
    role="presentation" widgetId="dijit_form_Button_0">
    <span class="dijitReset dijitInline dijitButtonNode" role="presentation" data-dojo-attach-event="ondijitclick:_onClick">
        <span disabled="" class="dijitReset dijitStretch dijitButtonContents" id="dijit_form_Button_0" role="button" aria-disabled="true" 
          aria-labelledby="dijit_form_Button_0_label" style="-ms-user-select: none;" data-dojo-attach-point="titleNode,focusNode">
            <span class="dijitReset dijitInline dijitIcon dijitNoIcon" data-dojo-attach-point="iconNode">
            </span>

            <span class="dijitReset dijitToggleButtonIconChar">
            ●
            </span>

            <span class="dijitReset dijitInline dijitButtonText" id="dijit_form_Button_0_label" data-dojo-attach-point="containerNode">
            Printing
            </span>
        </span>
    </span>
    <input tabindex="-1" disabled="" class="dijitOffScreen" role="presentation" type="button" value="" data-dojo-attach-point="valueNode">
</span></div>


<div class="esriPrint">
<span class="dijit dijitReset dijitInline dijitButton esriPrintButton" role="presentation" widgetId="dijit_form_Button_1">
    <span class="dijitReset dijitInline dijitButtonNode" role="presentation" data-dojo-attach-event="ondijitclick:_onClick">
        <span tabindex="0" class="dijitReset dijitStretch dijitButtonContents" id="dijit_form_Button_1" 
        role="button" aria-labelledby="dijit_form_Button_1_label" style="-ms-user-select: none;" data-dojo-attach-point="titleNode,focusNode">

            <span class="dijitReset dijitInline dijitIcon dijitNoIcon" data-dojo-attach-point="iconNode">
            </span>
            <span class="dijitReset dijitToggleButtonIconChar">
            ●
            </span>
            <span class="dijitReset dijitInline dijitButtonText" id="dijit_form_Button_1_label" data-dojo-attach-point="containerNode">
            Print
            </span>
        </span>
    </span>
<input tabindex="-1" class="dijitOffScreen" role="presentation" type="button" value="" data-dojo-attach-point="valueNode">
</span></div>

но как я могу вызвать это событие щелчка, потому что элемент легко найти, но не просто вызвать событие щелчка, или я не знаю, как вызвать это событие data-dojo-attach-event = "ondijitclick: _onClick"?

Вы можете подсказать, как назвать это событие?


person Rahul Gupta    schedule 19.06.2013    source источник
comment
технически хорошая шутка @Juffy, но сейчас не время для этого. если у вас есть ответ, то отправьте ....   -  person Rahul Gupta    schedule 20.06.2013
comment
Конечно, это не помогло. И, возможно, есть сбой в переводе, но ожидание всего 7 часов (помня, что это глобальный сайт, и некоторые из нас спали), прежде чем потребовать ответа, не принесет вам никаких друзей. :)   -  person Juffy    schedule 20.06.2013


Ответы (1)


Хотя это не полный ответ, я думаю, что причина того, что ваш .click() не работает, заключается в том, что вы «нажимаете» не то. В исходном коде моей карты все, что у меня есть:

<div id="printButton"></div>

но во время выполнения Dojo расширяет это до:

<div id="printButton">
  <div class="esriPrint">
    <span class="dijit dijitReset dijitInline esriPrintButton dijitButton" role="presentation" widgetid="dijit_form_Button_0">
      <span class="dijitReset dijitInline dijitButtonNode" data-dojo-attach-event="ondijitclick:_onClick" role="presentation">
...etc

и обратите внимание на тег data-dojo-attach-event на втором теге <span>. Я бы посмотрел на то, чтобы найти этот тег <span> и посмотреть, сможете ли вы вызвать для него событие щелчка.


ИЗМЕНИТЬ:

Да, .click() выбор правильного элемента ДЕЙСТВИТЕЛЬНО запускает задачу печати, я только что попробовал это в своем собственном приложении. Я широко использую jQuery, поэтому я использовал селектор #printButton .dijitInline, чтобы найти любой элемент с классом .dijitInline, который является потомком <div id="printButton">:

$('#printButton .dijitInline').click();

... и это запустило задачу печати точно так же, как если бы я щелкнул кнопку мышью. У вас должна быть возможность использовать эквивалент додзё, чтобы найти нужный элемент и щелкните по нему.

person Juffy    schedule 20.06.2013
comment
Еще раз спасибо @Juffy за ответ. И я знаю, что этот document.getElementById ('print_button'). Click () не будет работать, потому что это div. - person Rahul Gupta; 20.06.2013
comment
Нет, это не потому, что это div - div прекрасно кликабельны. Это потому, что для этого div не определено поведение onClick (), интеллектуальная часть находится в дочернем узле. - person Juffy; 20.06.2013
comment
Я использовал: require ([dojo / query, dojo / dom], function (query, dom) {var node = dom.byId (print_button); nl = query (.dijitButtonNode, node); if (nl.length ›0 ) nl [0] .click ();}); - person Rahul Gupta; 20.06.2013
comment
Есть ли какой-либо другой способ, например, событие печати с прямым вызовом, которое использует этот print_button ... потому что у меня так много проблем ... - person Rahul Gupta; 24.06.2013
comment
Здравствуйте, я пытаюсь вызвать PrintingTools (GPServer) - Задача экспорта веб-карты - выполнить вручную. для этой цели мне нужно изменить объект моей карты на объект json (веб-карта как JSON: (GPString)). это первый аргумент. поэтому я могу создать объект json вручную, но есть ли какой-либо способ получить объект Json непосредственно в API-интерфейсах Arcgis javascript 3.5? - person Rahul Gupta; 24.06.2013
comment
Умм ... есть много существующих вопросы по созданию объектов JSON. Если это не то, что вы пытаетесь сделать, я предлагаю вам задать новый вопрос. - person Juffy; 25.06.2013
comment
можем ли мы напрямую изменить объект карты на объект JSon? как это делает Print_button. И у меня есть еще один вопрос: знаете ли вы, где закодировано это событие Print_Button.Click ()? - person Rahul Gupta; 25.06.2013
comment
Под «задавать новый вопрос» я имею в виду публикацию нового вопроса с помощью кнопки «Задать вопрос» в правом верхнем углу, а не задавать больше вопросов в этой ветке. - person Juffy; 25.06.2013