Печать карт, используя Leaflet

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Печать карт, используя Leaflet

Сообщение jerry-maori » 23 май 2013, 21:03

Наклюнулась проблема: есть DIV, содержащий тайлы OSM и собственные слои (JSON)
Всё это дело обеспечивается leaflet
Стоит задача сей DIV распечатать.
Гугление показало, что у народа возникает проблема -- тайлы раскидывает по всей странице хаотично...
Может кто из местных аксакалов побеждал сей недуг?

Делаю примерно так:

Код: Выделить всё

function printContent(div_id) {

            var DocumentContainer = document.getElementById(div_id);
            var html = '<html><head>' +
               '<link rel="stylesheet"  href="css/leaflet.css"/>' +
			   '<link rel="stylesheet" href="css/style.css"/>' +
               '</head><body style="background:#ffffff;">' 
               + 
               DocumentContainer.innerHTML +
               '</body></html>';
            var WindowObject = window.open("", "PRINT MAP", "width=800,height=600,top=0,left=0,toolbar=no,scrollbars=no,status=no,resizable=no");
            WindowObject.document.writeln(html);
            WindowObject.focus();
            WindowObject.print();           
        }
Превью генерится идеальное.
preview.png
preview.png (242.31 КБ) 9987 просмотров
А вот результат удручающий.
epid_map.pdf
(438.63 КБ) 716 скачиваний
Заранее спасибо!

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Печать карт, используя Leaflet

Сообщение ericsson » 23 май 2013, 22:58

Не воспроизводится. FF21/winXP32bit/Bullzip PDF printer
Вложения
Moskus Maps - История систем противовоздушной обороны Центрального промышленного района.pdf
(1.18 МБ) 659 скачиваний

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Печать карт, используя Leaflet

Сообщение jerry-maori » 24 май 2013, 05:26

дык вы всю страницу печатаете, а мне треба только содержимое div вывести.
Да и со всей странице косяки получаются. Вёрстка слегка слетает и экстент.

Opera 12.15 / Win 7x 64/ doDPF Printer
FireFox 20.0.1/ Win 7x 64/ doDPF Printer
Google Chrome 27.0.1453.94 m / Win 7x 64/ doDPF Printer

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Печать карт, используя Leaflet

Сообщение ericsson » 24 май 2013, 08:53

Ну разнесите div на всю страницу, в чем проблема-то?

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Печать карт, используя Leaflet

Сообщение jerry-maori » 24 май 2013, 12:31

проблема в том, что помимо конкретного DIV на странице будет много чего ещё. а нужно печатать именно карту.

Хм... в Chrome печатается практически без распидорашивания. Только у легенды цветовое обозначение исчезает...

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Печать карт, используя Leaflet

Сообщение ericsson » 24 май 2013, 14:17

По кнопочке "print" на странице переключать стиль, который бы раскрывал карту на все окно.
Ну и вообще, раз во всех трех случаях одна общая часть - это ваш pdf printer, не пробовали воспользоваться другим?

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Печать карт, используя Leaflet

Сообщение jerry-maori » 24 май 2013, 14:36

угу.. а ещё два чб лазерника и 1 цветной.

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Печать карт, используя Leaflet

Сообщение jerry-maori » 25 май 2013, 19:32

Всё оказалось просто...

Код: Выделить всё

 function printContent2(div_id) 
 {
            var content = document.getElementById(div_id);
			var map_src = window.open("", "PRINT MAP", "width=800,height=600,top=0,left=0,toolbar=no,scrollbars=no,status=no,resizable=no");		
			map_src.document.writeln('<html><head>');
			map_src.document.writeln('<link rel="stylesheet"  href="css/leaflet.css"/>');
			map_src.document.writeln('<link rel="stylesheet" href="css/style.css"/>');
			map_src.document.writeln('</head><body style="background:#ffffff;">');
			map_src.document.writeln(content.innerHTML);
			map_src.document.writeln('</body></html>');
			map_src.document.close();
			map_src.focus();
			sleep(5000);
            map_src.print();           
  }


function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}
Самая важная строчка --

Код: Выделить всё

map_src.document.close();
Sleep воткнут, дабы при разных скоростях интернета успевали все тайлы в preview догрузиться...

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Печать карт, используя Leaflet

Сообщение jerry-maori » 19 апр 2016, 08:56

Апну тему;)
А вот есть люди, которые смогли поженить leaflet и это плагин:
https://github.com/aratcliffe/Leaflet.print

Вроде и томкат ставиль, плагин ставиль, он мне даже свои capabilites отдаёт.
А далее начинается Нарния:
самого MapFish Print целый пучок версий.
Причём они там радикально меняют внутренее API

Соотвестенно, поженить не получается.
Автор плагина тоже в GIT как-то подзабил на него.
Может есть рецепт в виде "версия плагина такая-то, версия Leaflet такая-то, сэмпл printProvider такой-то"?
А то пока пришлось для печать ещё и Highcharts прикручивать. Оно, конечно, работает, но как-то это неправильно.

Заранее спасибо.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: Semrush [Bot] и 2 гостя