ThinkGeo.com    |     Documentation    |     Premium Support

Showing high resolution WMS map on PdfGeoCanvas

Hello!



I have a problem with showing a high resolution WMS map on a PdfGeoCanvas. It seems like the canvas size is ruled by the PdfSharp Page Width and height values in Presentation Units. Presentation units seems to be linked to DPI and PPI values, and are not settable.

We have tried adjusting the Dpi and DrawingQuality with no apparent change in quality or resolution. (We have seen that the image fetched from the WMS is exactly the same size every time. This size being the Width and height of the page in Presentation Units.)

We also tried fiddling with the DrawingArea of the PdfGeoCanvas, but that just made the area larger than the available area, and thus resulting in clipping.



Can you advice on how to get higher resolution maps into the PDF?



Best regards,



Keld Laursen


Hi Kelb,



your guessing is correct and the pdfGeoCanvas decide the drawn image size and the drawn extent. The canvas width and height is equal with the image size and the drawn extent is equal with its CurrentExtent. We can watch them by setting a breakpoint after the BeginDrawing method. 

If we disable the DrawingArea property, then the canvas size will be calculated by the PdfShapr Page size and DPI. If we enable this property, the size will be calculated by this area size and DPI. But like you tried, changing the DrawingArea will also affect the drawn extent.



I think there are two ways worth to try. One is we change the PdfShapr Page size and the other way is we define a custom pdfcanvas. Please try the below:

1.  PdfShapr Page size:

            PdfPage page = document.AddPage();
            page.Width = 1400;
            page.Height = 1000;
2. custom pdfcanvas:


            CustomPdfGeoCanvas pdfGeoCanvas = new CustomPdfGeoCanvas();
            pdfGeoCanvas.DrawingArea = new System.Drawing.Rectangle(200, 50, 400, 400); // we should enable this property to make the custom canvas works.
 
public class CustomPdfGeoCanvas : PdfGeoCanvas
    {
        protected override void BeginDrawingCore(object nativeImage, RectangleShape worldExtent, GeographyUnit drawingMapUnit)
        {
            base.BeginDrawingCore(nativeImage, worldExtent, drawingMapUnit);
            base.Width = 800;
            base.Height = 600;
            base.CurrentWorldExtent = ExtentHelper.GetDrawingExtent(worldExtent, Width, Height); ;
        }
    }

Please let us know if you have any questions on them.

Thanks,

Troy