Pages: 1
- Sujet précédent - [Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - [Mapfish Print Module] Imprimer exactement ce qu'il y a sur la carte - Sujet suivant