Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 18 October 2012 11:04

yo_haha
Participant occasionnel
Lieu: Martil
Date d'inscription: 28 Sep 2008
Messages: 47

[Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte

Bonjour,

Je voudrais savoir comment configurer le module d'impression de Mapfish pour imprimer exactement ce qu'il y a sur la carte. J'ai une carte OpenLayers avec des couches Vector, WMS, OSM, WFS, Markers et des objets Popup. Ces couches peuvent être visibles ou non (avec un setVisibility(true/false)) et peuvent être d'opacité variable (setOpacity(float)).
Y a-t-il un tutoriel qui montre comment faire ? Sinon, pourriez-vous prendre de votre temps, SVP, pour m'expliquer comment faire ?

L'état actuel de mon outil d'impression est le suivant :
J'utilise la librairie ExtJS 3.4 et GeoExt 1.1

Code:

         // Le printProvider.
         var printProvider = new GeoExt.data.PrintProvider({
        method: "GET",
        encoding: "UTF-8",
        capabilities: printCapabilities
         });

           // La configuration de la page d'impression.
    var printPage = new GeoExt.data.PrintPage({
        printProvider: printProvider
        });
    
        // La carte de l'aperçu avant impression.
    var mapPanelPrint = new GeoExt.PrintMapPanel({
        map: {controls: [new OpenLayers.Control.Navigation()]},
        sourceMap: map, // map : carte OpenLayers.
        printProvider: printProvider,
        region: "center",
        width : 265,
        height : 355
    });
    
    // Le formulaire avec les options d'impression : titre, commentaire, taille et rotation.
    var formPanel = new Ext.form.FormPanel({
        region: "west",
        width: 150,
    height: 355,
        bodyStyle: "padding:5px",
        labelAlign: "top",
        defaults: {anchor: "100%"},
        items: [
            {
                xtype: "textfield",
                name: "mapTitle",
                fieldLabel: "Titre"
            },        
            {
                xtype: "textarea",
                name: "comment",
                value: "",
                fieldLabel: "Commentaire",
                plugins: new GeoExt.plugins.PrintPageField({
                    printPage: printPage
                })
            }, {
                xtype: "combo",
                store: printProvider.layouts,
                displayField: "name",
                fieldLabel: "Taille",
                typeAhead: true,
                mode: "local",
                triggerAction: "all",
                plugins: new GeoExt.plugins.PrintProviderField({
                    printProvider: printProvider
                })
            },{
                xtype: "textfield",
                name: "rotation",
                fieldLabel: "Rotation",
                plugins: new GeoExt.plugins.PrintPageField({
                    printPage: printPage
                })
            }],
        buttons: [{
            text: "Créer le PDF",
            handler: function() {
                // Récupérer le titre de la carte depuis le formulaire.
                printProvider.customParams.mapTitle = formPanel.getForm().getValues()['mapTitle'];
                
                                // Pour que l'étendu de la carte imprimée soit exactement celui de la carte d'aperçu.
                                printPage.fit(mapPanelPrint, true);

                                // Impression.
                                printProvider.print(mapPanelPrint, printPage);
               }
           }]
        });
    
    // Création d'un bouton qui ouvre un dialogue d'impression.
    print = new Ext.Button({
        iconCls: 'print',
        tooltip: "Imprimer la carte",
        handler: function(){    
            printDialog = new Ext.Window({
                title: "Aperçu avant impression",
                layout: 'border',
                items: [mapPanelPrint, formPanel]
            });
            printDialog.setSize(415,355);
            printDialog.on('show', function(){
                printDialog.center();
            });
            printDialog.show();
        }
    });

Avec cette configuration, je n'obtiens pas les popups ni les couches Vectors dans mon impression. De plus, les changements de visibilité et d'opacité des couches ne sont pas pris en compte.
De plus, printPage.fit() ne force pas l'obtention de l'étendue de la carte d'aperçu dans la carte imprimée. L'étendue de cette dernière est un peu plus grande.
Et l'attribut "encoding : 'UTF-8'" dans le printProvider ne force pas l'utilisation de cet encodage sur la page imprimée.

Auriez-vous des pistes pour régler tous ces soucis ?

Bien cordialement.

Hors ligne

 

#2 Sat 27 October 2012 09:29

Geo
Participant occasionnel
Lieu: Liège (Belgique)
Date d'inscription: 18 Sep 2007
Messages: 27

Re: [Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte

Salut,

Si tu veux imprimer ce qu'il y a sur ta carte, tu devrais peut-être te tourner vers la génération d'une page html dans laquelle tu irais rechercher ta composante ExtJS contenant ta map.

Par exemple, si tu as défini un panel 'MapPanel' contenant l'objet map (donc tes layers, ..) tu pourrais créer un bouton qui ouvrira un fichier html. Tu récupères ton objet 'MapPanel' avec une commande du style

Code:

targetElement = Ext.getCmp('mapPanel');
win.document.write(targetElement.body.dom.innerHTML);

Ainsi, tu imprimes ce que tu affiches (WFS, WMS, background image, etc)

J'ai notamment privilégié cette possibilité pour imprimer des fonds Google (non disponible avec plugin print du fait de restrictions)

Eventuellement, tu as un bout de code + bouton ici (http://georezo.net/forum/viewtopic.php?id=80980)

A+

Geoffroy

Dernière modification par Geo (Sat 27 October 2012 09:37)

Hors ligne

 

#3 Mon 29 October 2012 08:33

yo_haha
Participant occasionnel
Lieu: Martil
Date d'inscription: 28 Sep 2008
Messages: 47

Re: [Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte

Merci beaucoup Geoffroy smile
Je testerai cette solution.

Hors ligne

 

#4 Thu 06 December 2012 17:35

yo_haha
Participant occasionnel
Lieu: Martil
Date d'inscription: 28 Sep 2008
Messages: 47

Re: [Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte

Geoffroy,
Avec la solution que tu as proposée, je ne peux pas imprimer les popups. As-tu une solution pour cela ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB