Igor-Vladyka / leaflet.browser.print

A leaflet plugin which allows users to print the map directly from the browser
https://igor-vladyka.github.io/leaflet.browser.print/
MIT License
154 stars 76 forks source link

Has anyone got this to work with GoogleMutant? #47

Closed scaddenp closed 5 years ago

scaddenp commented 5 years ago

Having no luck with attempts to register layer. I am wondering if it is possible?

Igor-Vladyka commented 5 years ago

Please provide your code, to check what is wrong. But it should be as simple as: L.Control.BrowserPrint.Utils.registerLayer( L.GridLayer.GoogleMutant, "L.GridLayer.GoogleMutant", function(layer, utils) { return L.gridLayer.googleMutant(layer.options); } );

scaddenp commented 5 years ago

My code is: mc.print = L.control.browserPrint( {title:mapName, documentTitle:mapName
} ).addTo(map); L.Control.BrowserPrint.Utils.registerLayer( L.gridLayer.googleMutant, "L.GridLayer.GoogleMutant", function (layer,utils) { return L.gridLayer.googleMutant(layer.options); } ); which looks right. No errors coming up in console but no google maps either.

Igor-Vladyka commented 5 years ago

Can you provide full standalone example to debug it?

scaddenp commented 5 years ago

Yes, that seems possible. I will see what I can do.

scaddenp commented 5 years ago

okay, here a minimal test html. Obviously, the location of leaflet.browser.print.min.js needs to change and you will need your own google api key. (my key is locked to our servers). <!DOCTYPE html>

Google print test
Igor-Vladyka commented 5 years ago

I found one problem with empty object layer initialization, it's fixed. Hope it will help.

If not, then sorry, I have no intention to activate billable google map api. But you can help me to fix this problem:

Should be no problem for you.

Please let me know if fix works for you and/or if you are willing to provide an api key to debug this problem locally.

scaddenp commented 5 years ago

Ok, tried it but no joy. You could try this instead:

(It is the old style). This loads tiles with watermarks all over them into leaflet plus an alert. However, it might isolate the issue. I dont have access to my organisations credential manager for the api.

Igor-Vladyka commented 5 years ago

Okay, it was so stupid from my side :)

In register layer you have to use instance constructor and not a function.

Here is proper registration (as I wrote in first answer): L.Control.BrowserPrint.Utils.registerLayer( L.GridLayer.GoogleMutant, "L.GridLayer.GoogleMutant", function (layer,utils) { return L.gridLayer.googleMutant(layer.options); } );

And you have used function as instance mapper.

Regards, Igor

Brenokx commented 4 years ago

Hi, i'm having this problem when I'm using with domtoimage, have some idea? here the example: https://embed.plnkr.co/plunk/c60SyG3FA8HPAqUR

Brenokx commented 4 years ago

I find some workaround, adding encodeURI(), on dom-to-image directly replacing d.src=a with d.src=encodeURI(a)

Brenokx commented 4 years ago

or

    window.print = function () {
        let node = document.querySelector(".grid-print-container");
        return domtoimage
            .toPng(node, { filter: node => { return node.src = encodeURI(node.src); }})
            .then(function (dataUrl) {

                var link = document.createElement('a');
                link.download = map.printControl.options.documentTitle || "exportedMap" + '.png';
                link.href = dataUrl;
                link.click();
            });
    };