Страница 1 из 1

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

Добавлено: 23 май 2013, 21:03
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 КБ) 9990 просмотров
А вот результат удручающий.
epid_map.pdf
(438.63 КБ) 716 скачиваний
Заранее спасибо!

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

Добавлено: 23 май 2013, 22:58
ericsson
Не воспроизводится. FF21/winXP32bit/Bullzip PDF printer

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

Добавлено: 24 май 2013, 05:26
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

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

Добавлено: 24 май 2013, 08:53
ericsson
Ну разнесите div на всю страницу, в чем проблема-то?

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

Добавлено: 24 май 2013, 12:31
jerry-maori
проблема в том, что помимо конкретного DIV на странице будет много чего ещё. а нужно печатать именно карту.

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

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

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

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

Добавлено: 24 май 2013, 14:36
jerry-maori
угу.. а ещё два чб лазерника и 1 цветной.

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

Добавлено: 25 май 2013, 19:32
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 догрузиться...

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

Добавлено: 19 апр 2016, 08:56
jerry-maori
Апну тему;)
А вот есть люди, которые смогли поженить leaflet и это плагин:
https://github.com/aratcliffe/Leaflet.print

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

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

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