ThinkGeo.com    |     Documentation    |     Premium Support

Setting Up the Print Preview Window

 


I’m having some difficulty setting up the Print Preview window from an existing Map (Please see both pictures attached –as it is now, and how I’d like it to initially display). The Map comes in fine, but when the window initializes it displays the Map in the upper left corner off the screen. I can drag it and size it to where I want, but I’d like it to start out that way in the first place. I’ve adapted the code from the PrintPreview project and here it is my code as it now exists:
private void AddMapLayer()
        {
            // Create the MapPrinterLayer and set the position
            MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();
            mapPrinterLayer.MapUnit = GeographyUnit.DecimalDegree;
            mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));
            mapPrinterLayer.Open();
 
            // Set the maps position slightly below the pages center and 8 inches wide and 7 inches tall
            RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);
            mapPrinterLayer.SetPosition(8, 10, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);
 
            // Setup the intial extent and ensure they snap to the default ZoomLevel
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
            
            mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, CurrentExtent,
                 mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
 
            // Add the World Map Kit layer as the background
            WorldMapKitLayer worldMapKitLayer = new WorldMapKitLayer();
            worldMapKitLayer.Projection = WorldMapKitProjection.DecimalDegrees;
            mapPrinterLayer.Layers.Add(worldMapKitLayer);
 
            //Now Add our Layers
 
            mapPrinterLayer.Layers.Add(DetailLayer);
 
            mapPrinterLayer.MapExtent = CurrentExtent; //The original Extent of the MapControl before the PrintPreview window is called;
            PrinterInteractiveOverLay printerInteractiveOverLay = (PrinterInteractiveOverLay)MapControl.InteractiveOverlays["PrintPreviewOverlay"];
            printerInteractiveOverLay.PrinterLayers.Add("MapLayer", mapPrinterLayer);
 
 
Any Help would be greatly appreciated.
 
Bob

Hello Bob, 
  
 Thanks for your post, sorry I didn’t see the attached image, could you please check it? Our forums has a size limit which is 500KB. 
  
 Regards, 
  
 Gary

Here are the images...HMMMM.  I guess I now know how to upload them properly  :)


bob





I figured it out!  I don’t know why but I commented out the following lines of code and that was the key to getting it to display properly on load, then I just adjusted the values and I’ve got it perfect.   
  
           // Set the scale line position offset from the page center and 1.25 inches wide and .25 inches tall 
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch); 
             scaleLinePrinterLayer.SetPosition(1.25, .25, pageBoundingbox.GetCenterPoint().X - 3.25, pageBoundingbox.GetCenterPoint().Y - 4.75, PrintingUnit.Inch); 
  
  
 Thank you!!  Bob

Well, that’s strange, theoretically the boundingBox of scale line would have no effects on the map boundingBox, nevertheless, glad to hear that you’ve made it work. 
  
 If you have any questions, please let us know. 
  
 Regards, 
  
 Edgar