ThinkGeo.com    |     Documentation    |     Premium Support

PDF Sharp and Line Shape Files

I seem to constantly have issues outputing line shapefiles to PDF. My polygon and point files work fine. I have now even created a line shape file from scratch, and it still wont work.


Here is the code:


 


 


 foreach (Layer layer in map.StaticOverlay.Layers)             {                 pdfGeoCanvas.BeginDrawing(page, extent, map.MapUnit);                 {                     layer.Open();                     {                         layer.Draw(pdfGeoCanvas, new Collection<simplecandidate>() { });                     }                     layer.Close();                 }                 pdfGeoCanvas.EndDrawing();             }              foreach (Layer layer in map.DynamicOverlay.Layers)             {                 pdfGeoCanvas.BeginDrawing(page, extent, map.MapUnit); //map.CurrentExtent, map.MapUnit);                 {                     layer.Open();                     {                         layer.Draw(pdfGeoCanvas, new Collection<simplecandidate>() { });                     }                     layer.Close();                 }                 pdfGeoCanvas.EndDrawing();             } 


I have attached a zip containing my line shapefile. although its not included here, I have also created an index file.



1118-myrivers.zip (2.97 KB)

Jeremy,



Jeremy; I changed our installed sample using your data and it works fine. Here is the code and the screenshot.





Please have a try.



Thanks,

Howard



1119-DisplayASimpleMap.aspx.cs (2.91 KB)

hmm, thats really strange. I’ll doule check my code. 
  
 Thanks.

It still wont work, even with the code you gave me.  
  
 I’m using custom zoom levels with custom styles at custom scales. which is the only thing I can think of that may be messing it up. 
  
 I’m getting the error on the pdfGeoCanvas.EndDrawing(); part of the code. the exception thrown is: 
  
 NotSupportedException was not handled by user code 
 Specified method is not supported. 
  
 But like I said before the code works perfectly for Polygons and Points. Just as soon as I add a polyline layer it fails.

Yep, its definately the custom styles.


 


Please attempt the code below:


 


 ShapeFileFeatureLayer riverLayer = new ShapeFileFeatureLayer(@"F:\Configuration\Configuration\Uploads\Shapefiles\MyRivers.shp");

ThinkGeo.MapSuite.Core.LineStyle ls = new LineStyle();

ls.InnerPen.Color = new GeoColor(255, 0, 204, 255);

ls.InnerPen.MiterLimit = 1f;

ls.InnerPen.Width = 1f;

ls.InnerPen.LineJoin = DrawingLineJoin.Round;

ls.InnerPen.DashCap = GeoDashCap.Round;

ls.InnerPen.DashStyle = LineDashStyle.Solid;

ls.CenterPen.Color = new GeoColor(255, 51, 204, 255);

ls.CenterPen.MiterLimit = 0f;

ls.CenterPen.Width = 1f;

ls.CenterPen.DashCap = GeoDashCap.Round;

ls.CenterPen.LineJoin = DrawingLineJoin.Round;

ls.CenterPen.DashStyle = LineDashStyle.Solid;

ls.OuterPen.Color = new GeoColor(255, 102, 204, 255);

ls.OuterPen.MiterLimit = 0f;

ls.OuterPen.Width = 1f;

ls.OuterPen.LineJoin = DrawingLineJoin.Round;

ls.OuterPen.DashCap = GeoDashCap.Round;

ls.OuterPen.DashStyle = LineDashStyle.Solid;



ZoomLevel zl = new ZoomLevel(1.5f);

zl.CustomStyles.Add(ls);



riverLayer.ZoomLevelSet.CustomZoomLevels.Add(zl);

//riverLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.River1;

//riverLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

Map1.DynamicOverlay.Layers.Add(riverLayer);



riverLayer.Open();

Map1.CurrentExtent = riverLayer.GetBoundingBox();

riverLayer.Close();


The custom zoom level actually works. But I get the feeling its got something to do with one of the other settings. for example it I create my custom style for my custom zoom level using just the pen colors, it works.


 


After further investigation. It seems that is the DashCap thats causing an error. I get the feeling its either because I'm not using a dash patter, my pen width is one or that its a bug in the system.


Either way I get the impression that the error should get handled internally.



Jeremy, 
  
 We did some researches on this issue before; the reason is that PdfGeoCanvas or Xpen doesn’t support GeoDashCap.Round; so that, you cannot set DashCap as GeoDashCap.Round. Currently, we can use GeoDashCap.Flat to workaround it. Sorry for the inconvenience. 
  
 Please let me know if you have more questions. 
  
 Thanks, 
 Howard

Thanks Howard, I’ve already set my defaults to Flat, and removed the Round from my enumerator.

Jeremy, 
  
 Thanks letting me know.  
  
 Please feel free to ask if you have more questions. 
  
 Thanks, 
 Howard