ThinkGeo.com    |     Documentation    |     Premium Support

Print

 Hi, 


 
I have few questions about print with wpf Desktop Edition.
 
Question 1 :
What I want to print is what the user sees on his screen. So when he zooms, the printing changes.
So this works, but I have a problem with the display of the layers in the printing  with the zoomLevelset.
Layers have defaultareaStyle from a certain threshold of zoom.
 
Example :
The layer "Departement" is always visible no matter the level of zoom.

  ZoomLevelSet zleDpt = new ZoomLevelSet();
                zleDpt.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                zleDpt.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.SimpleColors.Blue, 3);
 

The layer "commune" (=state)  has a zoomLevelSet like this : 

ZoomLevelSet zleComm = new ZoomLevelSet();
                zleComm.ZoomLevel14.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                zleComm.ZoomLevel14.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.SimpleColors.Orange, 2);
 
 
So when the zoom equals ZoomLevel14, so the layer is visible. I have this behavior with the control Map but when I visualize the print preview, the layer is not visible (cf PrintMap PrintCapture.PNG).
 

 
If I zoom to ZoomLevel15, so the layer is visible in the map control and in the print preview. (cf PrintCapture1.png)
So is there a trick to have the same picture with the map control as the print preview.

 
 
Question 2:
The unit of the papersize has to be always in inch and not in cm ?
 printDocument.DefaultPageSettings.PaperSize = new PaperSize("AnsiA", 850, 1100);
 
I hope my explanation of my clear. If it's not, let me know.
 
Thanks for your help.
 
Regards.
 
Steph.
 
 


Hi Steph, 
  
 For your 1st question, could you please print it to the printer to see the output whether there is anything? Because we can recreate the same behavior: draw country02 on the map, then printer preview it, the Russia disappears, but when we print it to the printer, the Russia exists on the paper, so maybe it’s the issue of print preview window. If the output from your printer is still missing something, could you please provide your sample to help us recreate it? 
  
 For you 2nd question, the paper size is always in pixel, neither inch nor cm. 
  
 Regards, 
 Edgar


 Hi Edgar,


Thanks for your answer.


I sent an example with this problem to forumsupport@thinkgeo.com because the project is too big  (I joined too 2 shapefiles in the zip).


The object of the mail is Post Steph 01-04-2013 : Print


Thanks.


Regards.


Steph.




We still cannot recreate your issue, please have a look at the screencast, could you please tell us which version are you using?


Thanks,


Edgar



 Hi Edgar, 


We're using the version 6.0.0.0.


The screen resolution of my computer is 1920*1080


I have this problem if the size of the window equals full screen


 


But if I decrease the size of the window, I have no more this problem (decrease the window where I put a circle)


Thanks a lot for your help.


Regards.


Stéphanie.


 



Hello Steph, 
  
 Thanks for your detail description. I reproduce your issue when I set the form to 1700(or larger) * 1024, so please set  
  
 “_mapPrinterLayer.SetPosition(mapWidth, (_mapWidth / (map.ActualWidth / map.ActualHeight)), _pageBoundingbox.GetCenterPoint().X, _pageBoundingbox.GetCenterPoint().Y, PrintingUnit.Millimeter);”  
  
 in InitprinterLayer() in your code to  
  
 “_mapPrinterLayer.SetPosition(map.ActualWidth, map.ActualHeight, _pageBoundingbox.GetCenterPoint(), PrintingUnit.Point);” 
  
 And try to test again. 
  
 Actually, the MapPrinterLayer get the features to draw depend on the size of it, but the function of SetPosition() will change this value, so the size must equal to the actual size. If you want to set the different display size in the printer preview, you can set “PrinterGeoCancas.DrawingArea” in the Button click event in your code. If you have any other questions or if I am misunderstand please let me know. 
  
 Regards, 
  
 Gary

 Hi Gary, 


Thanks.


Yes, in my case the size of the print preview is smaller than the size of the map.


So I changed the code and I wrote the line "_mapPrinterLayer.SetPosition(map.ActualWidth, map.ActualHeight, _pageBoundingbox.GetCenterPoint(), PrintingUnit.Point)"


So the visibility of the layers in the print préview is solved, but I would like to have a smaller size in the print preview.


And if I changed the size of the drawingarea : 


 printerGeoCanvas.DrawingArea = printDocument.DefaultPageSettings.Bounds;


to  printerGeoCanvas.DrawingArea = new System.Drawing.Rectangle(100, 100, 900, 600);


The size of the drawing area is smaller but I have 2 problems now : 


1) What I see in the control map is different of what I see in the print preview because of the resize, the mapPrinterLayer is truncated.


2) The title of the print ("Cartographie de vos parcelles") and the scale line were repositioned because of the resize of the drawingarea. 


So may be I did a mistake with the Drawingarea when you say "you can set “PrinterGeoCancas.DrawingArea” in the Button click event in your code"


Thanks again for your help.


Regards.


Steph


 



Steph, 
  
 We modified your sample and it will work as you expected, you’ll get it from your email or the ftp server, we’ll let you know after we send it. 
  
 Regards, 
 Edgar

Hi Edgar,  
  
 Thanks for your help. 
  
 Regards. 
  
 Steph.

Hi Steph,  
  
 Please check your e-mail for your FTP login credentials.

I used to define the size of the image before Iprint the images= with the help of some fine imaging tools. I think it will be much more convenient. Do you have any good suggestion? Thanks in advance.







Best regards,

Arron

Hi Arron, 
  
 Would you please check on our Wiki sample on printing wiki.thinkgeo.com/wiki/Map_Suite_Wpf_Desktop_Edition_All_Samples#Print_Preview 
  
 Defining the size of the printing image can be supported in the sample. 
 Any questions please feel free to let us know. 
  
 Thanks, 
 Johnny

Hello, 
 I was checking out the possibility of providing print functionality from the map window in Map Suite wpf Desktop Edition. Is there any out of the box tool for printing the dynamic map? 
 Thanks, 
 Jacob

Hi Jocob,



I am guessing our online printing sample would help you on your questions, would you please check it?

wiki.thinkgeo.com/wiki/Map_S…nt_Preview



Thanks,

Troy

Hello Troy, 
  
 Is there an option to clone/copy the contents of an existing mapwindow to the mapwindow of the print preview? Or is it required that I have to load all the layers all over again and recreate them in the preview? 
  
 For example, if I have 20 layers displayed on wpfMap1, with styles, transparency, coordinate reprojection, ordering/priority etc set, do I need to create all of them all over again for printing? 
 What is the best and easiest method of achieving a print preview with the exact view of the current map window. 
  
 Thanks and regards, 
 Jacob

Hi Jacob, 
  
 If you just want to the same content on the preview window without any operations on those preview layer, then use the GetBitmap method should be fine, then load the bitmap into the preview window. 
  
 wpfMap1.GetBitmap(wpfMap1.Width,wpfMap1.Height) 
  
 But please noticed, only all the layers on the map are rendered completely, we can get the whole map content as we are using asynchronous way to render the layers. 
 Hope it helps. 
 Thanks, 
 Troy

Hi Troy, 
 I was able to create the bitmap using wpfMap1.GetBitmap((int)wpfMap1.ActualWidth,(int)wpfMap1.ActualHeight); 
 Can we add that bitmap generated to the Map control in the print preview page. I have a preview page which has a wpfMap. Or can it only be shown in an Image control. 
 Thanks in advance, 
 Jacob

Hi Jacob, 
  
 I think there are three ways to print a map: 
 1. using GetBitmap method and then print the bitmap simply. 
 2. defining a preview map page like our wiki sample "PrintPreview". With this way, we need to do more works as we need to define another map. 
 3. Combining the #1 and #2. In #2 preview map, we add an ImagePrinterLayer and this layer includes the map image which is from the #1. For instance: 
  
Bitmap mapContent = mainWindow.mainMap.GetBitmap(mainWindow.mainMap.width, mainWindow.mainMap.height);
            MemoryStream stream = new MemoryStream();
            mapContent.Save(stream,System.Drawing.Imaging.ImageFormat.Jpeg);

            GeoImage mapImage = new GeoImage(stream);
            ImagePrinterLayer imagePrinterLayer = new ImagePrinterLayer(mapImage);

            RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
            imagePrinterLayer.SetPosition(.75, .75, pageBoundingbox.GetCenterPoint().X + 3.5, pageBoundingbox.GetCenterPoint().Y - 2.0, PrintingUnit.Inch);
 
 We may adjust the SetPosition method to make the map image over the whole page. 
  
 Please let us know if you have any questions. 
 Thanks, 
 Troy

Thank you Troy!

Hi Aji,



You’re welcome. 



Any question don’t hesitate to let us know.



Regards,

Troy