ThinkGeo.com    |     Documentation    |     Premium Support

Wpf printing

I am following your printing example to try and print to pdf etc. The problem is that I am not able to see anything when I add my shape file to the printer layer. What am I doing wrong? I want to add a google layer, then add my shape file then preview and print it. Do you have any examples for this? I have copied the code from your example as shown below:


 


 


void AddMapLayer(WpfMap wpfPrint, string ShapeFileLocation)// Create the MapPrinterLayer and set the positionMapPrinterLayer mapPrinterLayer = new MapPrinterLayer();//Map Printer Layer is in feet (State Plane Texas North Central Feet NAD83) GeographyUnit.DecimalDegree;//Set the extent of the MapPrinterLayer with world coordinates. RectangleShape currentExtent = new RectangleShape(2276456, 6897886, 2280391, 6895437);new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));// Set the maps position slightly above the page center and 8 inches wide and 7 inches tall RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch,wpfPrint);PrintingUnit.Inch);//Setup the styles for the parcels layer. ShapeFileFeatureLayer parcelsLayer = new ShapeFileFeatureLayer(@ShapeFileLocation, ShapeFileReadWriteMode.ReadWrite);//Creates a value style for the parcel type (residential 1, commercial 2, industrial 3). 

// Add the new parcels layer to the MapPrinterLayer // Add the MapPrinterLayer to the PrinterInteractiveOverlay PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)wpfPrint.InteractiveOverlays["PrintPreviewOverlay"];"MapLayer", mapPrinterLayer);{ public void SetupMapWithBlankPage(WpfMap Map1)try{// Setup the map unit, you want to always use feet or meters for the printer layout map. GeographyUnit.DecimalDegree;// Map1.CurrentExtent = new RectangleShape(17897271, -1367305, 19514067, -2411741); // That pre-defines commonly used zoom levels based on percentages of zoom

Map1.ZoomLevelSet =


Map1.BackgroundOverlay.BackgroundBrush =


 


 


Map1.InteractiveOverlays.Add(


Map1.InteractiveOverlays.MoveToBottom(


 


 


pagePrinterLayer.Open();


printerOverlay.PrinterLayers.Add(


 


Map1.CurrentExtent =


Map1.MinimumScale = Map1.ZoomLevelSet.ZoomLevel20.Scale;


}


 


}


new PrinterZoomLevelSet(Map1.MapUnit, PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit));// Here we set the background color to gray so there is contrast with the white page new GeoSolidBrush(GeoColor.StandardColors.LightGray);// Create the PrinterInteractiveOverlay to contain all of the PrinterLayers. // The interactive overlay allows the layers to be interacted with PrinterInteractiveOverlay printerOverlay = new PrinterInteractiveOverlay();"PrintPreviewOverlay", printerOverlay);"PrintPreviewOverlay");// Create the PagePrinterLayer which shows the page boundary and is the area the user will // arrange all of the other layer on top of. PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.AnsiA, PrinterOrientation.Portrait);"PageLayer", pagePrinterLayer);// Get the pages extent, slightly scale it up, and then set that as the default current extent RectangleShape.ScaleUp(pagePrinterLayer.GetPosition(), 10).GetBoundingBox();// Set the minimum sscale of the map to the last zoom level catch{}

 


{


 


 


mapPrinterLayer.Layers.Add(parcelsLayer);


 


printerInteractiveOverlay.PrinterLayers.Add(


}


 


 


public



 


 


Map1.MapUnit =


 



mapPrinterLayer.MapUnit =


mapPrinterLayer.MapExtent = currentExtent;


mapPrinterLayer.BackgroundMask =


mapPrinterLayer.Open();


 


mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1,


 


 


typeValueStyle.ColumnName = "PARCELTYPE";


typeValueStyle.ValueItems.Add(new ValueItem("1", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));


typeValueStyle.ValueItems.Add(new ValueItem("2", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightPink))));


typeValueStyle.ValueItems.Add(new ValueItem("3", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightBlue))));


parcelsLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(typeValueStyle);



Bimal, 
  
 Thanks for your post. 
  
 I have tried to make your code running, but failure. Could you provide a complete simple project that show your problem? You can zip it and upload to the forum as file. 
  
 And also you mention you get our printing example, which sample is it? Could you point it more specific? 
  
 Expect you give us more information that help us to resolve you problem. 
  
 Thanks, 
 James

Hi, 
 I have attached the project and I have used your example from . When you run the project, click on the Print tab at the bottom  
 This should load and display a shapefile but that does not happen. 
  
 I am using the print preview example from here: 
 wiki.thinkgeo.com/wiki/Map_Suite_Wpf_Desktop_Edition_Printing_Samples 
  


Hello Bimal, 
  
 Thanks for your further information, but sorry I didn’t see any attached sample, could you please re-upload it again? If it’s too big to upload, you can send to support@thinkgeo.com and ask forward to James or me. 
  
 Regards, 
  
 Gary

Hi,


I have sent the project to the support email address. Even if you can get your own sample from here wiki.thinkgeo.com/wiki/Map_Suite_Wpf_Desktop_Edition_Printing_Samples and add a google layer and one of the shape files I have emailed with my project, it will be good for me.


I just need an example where I se see this work i.e map with google layer and at least one of my shape file layers and being able to print.


Regards,


Bimal



Bimal, 
  
 I got your sample and I don’t find the shapefile be created after load window and click the Print tab, I set breakpoints for all place that new a ShapeFielFeatureLayer, so could you point me that which line of code for loading shape file and maybe just call the method at print tab shown. 
  
 Thanks, 
 James

Hi,


Maybe you can ignore the code and take your print preview sample and add a google layer to it. I have managed to plot the worldmaplayer but the googlemap layer just gives a red cross when I try to add.


If you can make your sample work, it will be sufficient for me to copy that to my code.



Hello Bimal,


Thanks for your further information, the attached file is the sample I made some change to let it work with GoogleMap, please have a see.


Sorry because the maximum file size limit on forums, so I deleted the dependence and data file, you can get it from the original sample.


Regards,


Gary



ServicesEditionSample_PrintPreview_CS_WPF_1111.zip (133 KB)