[Users] Some printing questions

gbrun gbrun at myopera.com
Fri Oct 7 17:05:38 CEST 2011


I would say, your legendPanel is not really cloned. In fact, the same  
javascript object relies upon your both variables ("legendPanel" and  
"cloneLegPanel"). It may exist a way allowing to really copy a javascript  
object and "paste" it in an other variable. In your case, it subsists a  
link between your two variables: when you modify the object represented by  
one of them, it also affects the other. Unfortunately, I don't know how to  
solve this problem. For layers, in GeoExt, it exists a "clone" function  
for the "LayerRecord" class that cleanly clones layers. It might be  
possible to do something similar with your legend.

An other idea: if it doesn't work with the "beforeprint" function, you can  
try the "beforeencodelayer" function. In my app, I use this function to  
change layers url before they are printed (because of some problem with  
GeoWebCache layers). It works for layers: maybe there is a way to use this  
function for legend?

Geoffrey



Le Fri, 07 Oct 2011 16:38:25 +0200, Hugo <hfpmartins at gmail.com> a écrit:

> Hi,
>
> After testing a little bit more, i found that if i use this code in the
> beforeprint listener it still complains about the encoding itself. So, i
> moved this code to the handler of a print button before calling the print
> method. Using this approach it works somehow but it removes all my vector
> layers from the map. As you told, i have cloned the legendPanel (using
> Ext.apply) and still get the same issue, all my vector layers are gone.
>
> Here is the current code:
>
> var cloneLegPanel = {};
> Ext.apply(cloneLegPanel, legendPanel);
> var legLayerStore = cloneLegPanel.layerStore;
> legLayerStore.each(function(record){
> var layerRec = record.get('layer');
> if (layerRec.CLASS_NAME == 'OpenLayers.Layer.Vector'){
> legLayerStore.remove(record);
> }
> });
> printProvider.print(mapPanel, printPage, {legend: cloneLegPanel});
>
> With this code i get the legends in the mapfish print pdf but i cannot  
> print
> vector layers and they are removed from the map.
> What would you suggest? The thing i don't understand is why my vectors
> layers are being removed when i'm using a cloned object of the GeoExt  
> Legend
> Panel. Any ideas?
>
> Thanks once again,
> Hugo
>
> On Fri, Oct 7, 2011 at 2:09 PM, gbrun <gbrun at myopera.com> wrote:
>
>> Hum, looking at your code, it might work! What does it happen with this
>> code? Vector layers are completely removed from the map, not only from  
>> the
>> legend panel? In this case, you should indeed clone your legend. Then,  
>> you
>> could remove vector layers from this cloned legend. A the end, you can
>> replace the old legend by the new one in your print function.
>>
>> I have never gone into this problem, so I have no ready-made solution!  
>> In
>> my app, I have deactivated the "print legend" capabilities when a vector
>> layer is contained in a map.
>>
>> Geoffrey
>>
>>
>>
>> Le Fri, 07 Oct 2011 14:49:34 +0200, Hugo <hfpmartins at gmail.com> a écrit:
>>
>>
>>  Hello Geoffrey,
>>>
>>> Thanks a lot for your comments but my problem is exactly at destroying  
>>> the
>>> legend printing for the vector layers. I have no idea on how to do  
>>> this. I
>>> have tried the following but without success:
>>>
>>> beforeprint: function(printProv, printMap, printPages, printOpt){
>>> var includeLegend = Ext.getCmp('includeleg').**getValue();
>>> if (includeLegend == true){
>>> var legOpt = printOpt.legend;
>>> var legLayerStore = legOpt.layerStore;
>>> legLayerStore.each(function(**layerRec){
>>> var layerDef = layerRec.get('layer');
>>> if (layerDef.ClASS_NAME == 'OpenLayers.Layer.Vector'){
>>> legLayerStore.remove(layerRec)**;
>>> }
>>> })
>>> }
>>> }
>>>
>>> So my question would be, how can i tell the printprovider to not print  
>>> the
>>> legend for this type of layers?
>>>
>>> Thanks a lot,
>>> Hugo
>>>
>>> On Fri, Oct 7, 2011 at 8:37 AM, gbrun <gbrun at myopera.com> wrote:
>>>
>>>  Hi!
>>>>
>>>> I would rather use the "beforeprint" or the "beforeencodelayer"  
>>>> function
>>>>  from the "printProvider" class. This function allows you to change  
>>>> some
>>>> parameters before layers are printed. So, trough this function, you  
>>>> can
>>>> test if your map contains vector layers. In this case, you can  
>>>> probably
>>>> find a way to destroy their relative legend from the print process.  
>>>> You
>>>> will find below an example:
>>>>
>>>>       printProvider = new GeoExt.data.PrintProvider({
>>>>               method: 'POST', // 'POST' recommended for production use
>>>> ('GET' for
>>>> development)
>>>>               capabilities: printCapabilities, // from the info.json
>>>> script in the html
>>>>               listeners:{
>>>>                       beforeprint: function(){
>>>>                               // test each layer
>>>>                                       // if the layer is vector,  
>>>> remove
>>>> it
>>>> from the printed legend
>>>>                       }, // or use the "beforeencodelayer" function
>>>>                       beforeencodelayer: function (printProvider,  
>>>> layer){
>>>>                               // test each layer (easy with the layer
>>>> parameter provided by this
>>>> function!)
>>>>                                       // if the layer is vector,  
>>>> remove
>>>> it
>>>> from the printed legend
>>>>                       }
>>>>               }
>>>>       });
>>>>
>>>> I hope it might help you!
>>>>
>>>> Geoffrey
>>>>
>>>>
>>>> Le Thu, 06 Oct 2011 20:17:20 +0200, Hugo <hfpmartins at gmail.com> a  
>>>> écrit:
>>>>
>>>> > Hello once again,
>>>> >
>>>> > One more question though... If i still want to print legends without
>>>> wfs
>>>> > and
>>>> > vector layers, how can i avoid these layers being passed in the
>>>> request?
>>>> >
>>>> > At the moment i have:
>>>> > printProvider.print(mapPanel, printPage, {legend: legendPanel});
>>>> >
>>>> > So i suppose i have to clone my legendPanel and set some properties  
>>>> for
>>>> > the
>>>> > layers i don't want to include in the legend. What would be the
>>>> approach
>>>> > to
>>>> > follow?
>>>> >
>>>> > Thanks,
>>>> > Hugo
>>>> >
>>>> > On Thu, Oct 6, 2011 at 2:48 PM, Hugo <hfpmartins at gmail.com> wrote:
>>>> >
>>>> >> Hello Chris and Geoffrey,
>>>> >>
>>>> >> Thanks a lot for your replies. I will look further into your
>>>> suggestions
>>>> >> and come back with feedback.
>>>> >> Cheers,
>>>> >>
>>>> >> Hugo
>>>> >>
>>>> >>
>>>> >> On Tue, Oct 4, 2011 at 8:15 PM, Christian Mayer
>>>> >> <mayer at terrestris.de>wrote:
>>>> >>
>>>> >>> **
>>>> >>> Hello Hugo,
>>>> >>>
>>>> >>> for your second problem you may use the beforeprint event of the
>>>> >>> PrintProvider class, with the
>>>> >>> listener arguments:
>>>> >>>
>>>> >>>    - printProvider -
>>>> >>> GeoExt.data.PrintProvider<
>>>> http://geoext.org/lib/GeoExt/**data/PrintProvider.html#**
>>>> GeoExt.data.PrintProvider<http://geoext.org/lib/GeoExt/data/PrintProvider.html#GeoExt.data.PrintProvider>
>>>> >this
>>>> >>> PrintProvider
>>>> >>>    - map - OpenLayers.Map the map being printed
>>>> >>>    - pages - Array of
>>>> >>> GeoExt.data.PrintPage<
>>>> http://geoext.org/lib/GeoExt/**data/PrintPage.html#GeoExt.**
>>>> data.PrintPage<http://geoext.org/lib/GeoExt/data/PrintPage.html#GeoExt.data.PrintPage>
>>>> >the
>>>> >>> print pages being printed
>>>> >>>    - options - Object the options to the print command
>>>> >>>
>>>> >>> see:  
>>>> http://geoext.org/lib/GeoExt/**data/PrintProvider.html<http://geoext.org/lib/GeoExt/data/PrintProvider.html>
>>>> >>>
>>>> >>> Maybe you check and rearrange your map object here.
>>>> >>>
>>>> >>> Best regards,
>>>> >>> Chris
>>>> >>>
>>>> >>> Am 04.10.2011 19:58, schrieb gbrun:
>>>> >>>
>>>> >>> Hi Hugo,
>>>> >>>
>>>> >>> As far as I know, printing vector legend is not supported in the
>>>> >>> current
>>>> >>> GeoExt trunk.
>>>> >>>
>>>> >>> No idea for your second problem!
>>>> >>>
>>>> >>> Geoffrey
>>>> >>>
>>>> >>>
>>>> >>> Le Tue, 04 Oct 2011 17:15:01 +0200, Hugo <hfpmartins at gmail.com>
>>>> >>> <hfpmartins at gmail.com> a écrit:
>>>> >>>
>>>> >>>
>>>> >>>  Hello all,
>>>> >>>
>>>> >>> I was able to implement printing using printprovider, printpage  
>>>> and
>>>> the
>>>> >>> printextent plugin. However i have some small bugs which, untill  
>>>> now,
>>>> i
>>>> >>> wasn't able to solve.
>>>> >>>
>>>> >>> The first problem i'm having is related with printing legends when
>>>> >>> having
>>>> >>> WFS layers on the map (firebuf is always showing: encFn is
>>>> undefined).
>>>> >>> I
>>>> >>> have checked the encoders part of the prinProvider.js and in fact  
>>>> i
>>>> >>> don't
>>>> >>> see WFS there. However there is an encoder for vector layers. So  
>>>> my
>>>> >>> first
>>>> >>> question would be is it possible to print legends with WFS?
>>>> >>>
>>>> >>> My second problem is related with layer order. When the app is
>>>> loaded,
>>>> >>> there
>>>> >>> are some initial layers that are loaded (WMS, WFS and TileCache).  
>>>> I
>>>> >>> also
>>>> >>> have the functionality to allow user to add additional layers
>>>> returned
>>>> >>> by
>>>> >>> WMS capabilities of geoserver. Because i wnated to keep all layers
>>>> that
>>>> >>> were
>>>> >>> initially loaded above all others i'm setting layers ZIndex
>>>> dynamically
>>>> >>> in
>>>> >>> the app. All is working fine when viewing and adding new layers (i
>>>> >>> always
>>>> >>> get inital loaded layers on top of the added ones). However, when
>>>> >>> trying
>>>> >>> to
>>>> >>> print, the added layers from wms capabilities are always on the  
>>>> top
>>>> of
>>>> >>> all
>>>> >>> others. More interesting is that, after printing, all layers are
>>>> >>> magically
>>>> >>> rearranged and in fact, the added layers become on top of all the
>>>> >>> others.
>>>> >>> What property am i missing here???
>>>> >>>
>>>> >>> Kind regards,
>>>> >>> Hugo
>>>> >>>
>>>> >>>
>>>> >>>  ______________________________**_________________
>>>> >>> Users mailing
>>>> >>> listUsers at geoext.orghttp://
>>>> www.geoext.org/cgi-bin/**mailman/listinfo/users<http://www.geoext.org/cgi-bin/mailman/listinfo/users>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> --
>>>> >>> Dipl.-Ing.(FH) Christian Mayer
>>>> >>>   - Anwendungsentwickler -
>>>> >>>
>>>> >>>   terrestris GmbH & Co. KG
>>>> >>>   Irmintrudisstraße 17
>>>> >>>   53111 Bonn
>>>> >>>
>>>> >>>   Tel:    ++49 (0)228 / 96 28 99 -53
>>>> >>>   Fax:    ++49 (0)228 / 96 28 99 -57
>>>> >>>
>>>> >>>   Email:  mayer at terrestris.de
>>>> >>>   Web:    http://www.terrestris.de
>>>> >>>
>>>> >>>   Amtsgericht Bonn, HRA 6835
>>>> >>>   Komplementärin:  terrestris Verwaltungsgesellschaft mbH
>>>> >>>   vertreten durch: Hinrich Paulsen, Till Adams
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> ______________________________**_________________
>>>> >>> Users mailing list
>>>> >>> Users at geoext.org
>>>> >>>  
>>>> http://www.geoext.org/cgi-bin/**mailman/listinfo/users<http://www.geoext.org/cgi-bin/mailman/listinfo/users>
>>>> >>>
>>>> >>>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Hugo Martins
>>>> >> LabNT - ISEGI UNL
>>>> >> Campus de Campolide
>>>> >> 1070-312 Lisboa
>>>> >> N 38°43'56.84", W 9°9'35.74"
>>>> >>
>>>> >
>>>> >
>>>> >
>>>>
>>>>
>>>> --
>>>> --
>>>> Geoffrey BRUN
>>>>
>>>> Étudiant en master SIGMA
>>>> Stagiaire au PNR du Haut-Languedoc
>>>>
>>>> Hameau de Brassac
>>>> Saint-Pons de Thomières
>>>> +33 (0) 6 77 74 44 16
>>>> ______________________________**_________________
>>>> Users mailing list
>>>> Users at geoext.org
>>>> http://www.geoext.org/cgi-bin/**mailman/listinfo/users<http://www.geoext.org/cgi-bin/mailman/listinfo/users>
>>>>
>>>>
>>>
>>>
>>>
>>
>> --
>> --
>> Geoffrey BRUN
>>
>> Étudiant en master SIGMA
>> Stagiaire au PNR du Haut-Languedoc
>>
>> Hameau de Brassac
>> Saint-Pons de Thomières
>> +33 (0) 6 77 74 44 16
>>
>
>
>


-- 
-- 
Geoffrey BRUN

Étudiant en master SIGMA
Stagiaire au PNR du Haut-Languedoc

Hameau de Brassac
Saint-Pons de Thomières
+33 (0) 6 77 74 44 16


More information about the Users mailing list