Печать в Google Cloud Print с динамическим URL

Мне бы хотелось, чтобы кнопка "Печать" на моем веб-сайте распечатывала документ с помощью Google Cloud Print, но я хочу, чтобы "URL" цели - файл PDF - динамически изменялся после нажатия кнопки (особенно на основе того, что возвращается из вызова AJAX).

Кажется, что GCP Web Element (GCPWE) имеет схожую функциональность, но не совсем то, что я хочу. В частности, кажется, что можно изменить только "цель" (вызывая setPrintDocument) до нажатия кнопки.

Есть ли способ указать URL для GCPWE после нажатия кнопки?

Вот пример кода с сайта GCPWE:

<div id="print_button_container"> </div>


<script src="http://www.google.com/cloudprint/client/cpgadget.js">
</script>
<script defer="defer">
    var gadget = new cloudprint.Gadget();
    gadget.setPrintButton(
          cloudprint.Gadget.createDefaultPrintButton("print_button_container"));
    gadget.setPrintDocument("url", "[document title]", "[document URL]");
</script>

Я подумывал спрятать <div id='print_button_container'> и запуск .click событие на нем после нажатия видимой кнопки печати, но это выглядит довольно не элегантно и неправильно. Я посмотрел на gpwidget.js ссылка на выше, но код был свернут и непонятен (для меня, во всяком случае).

То, что я, кажется, желаю, это Javascript print функция, которой вы передаете [URL документа] и [название документа].

Есть ли лучший способ достичь желаемой функциональности, а не "нажатие скрытой кнопки", которую я придумал?

Спасибо за чтение.

2 ответа

Решение

Вы можете открыть диалог печати, когда захотите, просто позвоните:

gadget.openPrintDialog()

и это откроет диалоговое окно принтера. Так что для вашего случая вы можете создать кнопку печати, используя статический метод:

cloudprint.Gadget.createDefaultPrintButton("print_button_container");

затем присоедините пользовательские обработчики для кнопки, и когда вы будете готовы, просто позвоните

var gadget = new cloudprint.Gadget();
gadget.setPrintDocument(...);
gadget.openPrintDialog();

Вы можете вызвать метод gadget.setPrintDocument() в любой момент, даже после открытия диалогового окна печати.

Другие вопросы по тегам