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

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

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

Сообщение jerry-maori »

Наклюнулась проблема: есть 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 КБ) 10040 просмотров
А вот результат удручающий.
epid_map.pdf
(438.63 КБ) 721 скачивание
Заранее спасибо!
ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

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

Сообщение ericsson »

Не воспроизводится. FF21/winXP32bit/Bullzip PDF printer
Вложения
Moskus Maps - История систем противовоздушной обороны Центрального промышленного района.pdf
(1.18 МБ) 662 скачивания
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

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

Сообщение jerry-maori »

дык вы всю страницу печатаете, а мне треба только содержимое 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 »

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

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

Сообщение jerry-maori »

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

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

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

Сообщение ericsson »

По кнопочке "print" на странице переключать стиль, который бы раскрывал карту на все окно.
Ну и вообще, раз во всех трех случаях одна общая часть - это ваш pdf printer, не пробовали воспользоваться другим?
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

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

Сообщение jerry-maori »

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

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

Сообщение jerry-maori »

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

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

 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 »

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

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

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

Заранее спасибо.
Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость