ThinkGeo.com    |     Documentation    |     Premium Support

PagePrinterLayer Custom Size/Landscape issue

I've got the following code, taken almost directly from the printing example:


 





        private void Form1_Load(object sender, EventArgs e)

        {

            SetupMapWithBlankPage();



            winformsMap1.Refresh();

        }



        private void SetupMapWithBlankPage()

        {

            // Setup the map unit, you want to always use feet or meters for printer layout maps

            winformsMap1.MapUnit = GeographyUnit.Meter;



            // Here we create the default zoom levels for the sample.  We have pre-created a PrinterZoomLevelSet

            // That pre-defines commonly used zoom levels based on percentages of zoom

            winformsMap1.ZoomLevelSet = new PrinterZoomLevelSet(winformsMap1.MapUnit, PrinterHelper.GetPointsPerGeographyUnit(winformsMap1.MapUnit));



            // Here we set the background color to gray so there is contrast with the while page

            winformsMap1.BackgroundOverlay.BackgroundBrush = 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();

            winformsMap1.InteractiveOverlays.Add("PrintPreviewOverlay", printerOverlay);

            winformsMap1.InteractiveOverlays.MoveToBottom("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.Custom, PrinterOrientation.Landscape);



            float pageWidth = (float)PrinterHelper.ConvertLength(24, PrintingUnit.Inch, PrintingUnit.Point);

            float pageHeight = (float)PrinterHelper.ConvertLength(36, PrintingUnit.Inch, PrintingUnit.Point);

            pagePrinterLayer.CustomWidth = pageWidth;

            pagePrinterLayer.CustomHeight = pageHeight;



            pagePrinterLayer.Open();

            printerOverlay.PrinterLayers.Add("PageLayer", pagePrinterLayer);



            // Get the pages extent, slightly scale it up, and then set that as the default current extent

            winformsMap1.CurrentExtent = RectangleShape.ScaleUp(pagePrinterLayer.GetPosition(), 10).GetBoundingBox();



            // Set the minimum scale of the map to the last zoom level

            winformsMap1.MinimumScale = winformsMap1.ZoomLevelSet.ZoomLevel20.Scale;

        }


 

But now, whenever I zoom, pan, or resize my window, the printer page flips between landscape and portrait..  Very frustrating.


Anyone seen anything like this before?


Thanx!


-Jason



Just to keep it all in one thread...  I'm also having an issue with the output to PDF.. 


 


I've attached 2 screenshots.  One of how the application looks prior to printing, and another of how the pdf looks when it's opened.  Why the extreme rounding fo the ends?  Why do they go outside of the map boundary?


Is there anything I can do about this?  If this is how it prints these out, they're unusable to me  :(


I'm basically trying to get to the point I can print out the map at 36" x 24" on a plotter.  The demo video states this is possible.


Thanx!


Jason





Jason,


 Thank you for your posts. The problem with PDF output has been clearly defined and we are working on a fix for that.


The flipping problem between landscape and portrait is very intriguing and we have not been able to reproduce this behavior. Can you please send us a small demo that we can run and see the problem happening? Thank you.



I’ll work on getting you a demo of that… 
  
 Any thoughts on when the PDF output issue might be resolved? 
  
 Thanx!

Jason, 
  
  I will meet with the Development Team tomorrow and discuss that issue with them. I will have a clearer idea on when it will fixed and I will let you know. Thank you for working on getting a demo for us.

I haven't had a chance to get the demo running, yet, of the PagePrinterLayer flipping from Landscape to Portrait..  However, I know _where_ it's happening...



            //PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.AnsiA, PrinterOrientation.Landscape);

            PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.Custom, PrinterOrientation.Landscape);



            float pageWidth = (float)PrinterHelper.ConvertLength(_widthInInches, PrintingUnit.Inch, PrintingUnit.Point);

            float pageHeight = (float)PrinterHelper.ConvertLength(_heightInInches, PrintingUnit.Inch, PrintingUnit.Point);

            pagePrinterLayer.CustomWidth = pageWidth;

            pagePrinterLayer.CustomHeight = pageHeight;



If I uncomment the first line, and comment out the rest, it stops happening.  (Even if _widthInInches=8.5 and _heightInInches=11)


So, seems to be an issue with the PrinterPageSize.Custom?


Thanx.



Maybe I’m looking at this, wrong?  Let me tell you my specifications, and then if you have an idea of the best way to fulfill those…  I can generate the needed map, but… 
  
 I’ve been tasked with printing the map on a 36"x24" (in landscape) plotter.  And the map basically needs to be zoomed into Level20 to get all of the details.  I want a pretty small extent printed out, but I’d like everything ‘scaled up’ to the 36"x24" size. 
  
 If I try to use the PDF output, you can see my results.  If that worked, I could simply create it at that scale and let it ‘zoom up’ on its own when printing to the large plotter since it’s vector-based.  I’m not sure, though, how my png points would look scaled up. 
  
 If I try to create the PagePrinterLayer using the code in my previous message, it looks fine on screen.  But when I try to print it out, I get a very vague complusexception  :(  _COMPlusExceptionCode = -532459699.  If I change the width/height to 8.5/11, I can print.  But, again, the output doesn’t match at all what I see on my screen. 
  
 What’s the best way to print large-scale maps based on a smaller-scaler version on the screen?  I figured the hard part would be getting all of my mapping looking right, not printing…  *sigh* 
  
 Any help is GREATLY appreciated. 
  
 Thanx! 
  
 Jason

Jason,


 From reading your comments I think that you are touching on many different printing concepts.  But it is a little bit difficult to sort them out and come up with some solutions due to the lack of concrete background for your case.  There are many comments that you make that seems very interesting but I cannot fully understand without a sample from you. For example, when you say: "If I try to use the PDF output, you can see my results. If that worked, I could simply create it at that scale and let it 'zoom up' on its own when printing to the large plotter since it's vector-based. I'm not sure, though, how my png points would look scaled up." , it would help tremendously with a sample to know exactely what you are experiencing. 

    I am going to take a few days off and I will be back at work on Wednesday morning. In the meantime, can you prepare a little sample? Also, did you see the sample Large Scale Map Printing in the Code Community wiki.thinkgeo.com/wiki/Map_Suite_De...ng_Samples. It deals with many issues related to printing Large Scale Maps and I think it can help you. Thank you.


 


 



Unfortunately, many of the shape files I’m using are proprietary, and I can’t share them.  Trying to think of a way to provide an example without that.  I realize I’m listing a lot of issues all at once, and I apologize.  I _have_ looked at the example you list.  But I can’t run it because I’m using the standard desktop edition, not the WPF edition.  I’ll see if I can glean something useful by reviewing the code… 
  
 If the PDF printing worked well (refer to 2nd post in this thread), that would be ideal.  My issues with that are: 
 1) My .png PointStyles cause the app to crash with a complus exception 
 2) When printing PDF, my .png line symbols aren’t showing up ON the lines themselves 
 3) The map isn’t taking up as much of the page in the PDF as it should 
  
 Unfortunately, I’m not sure I’m allowed to send you those lines and files.  Let me ask.  If so, I can just send you my app as-is (with some cleanup). 
  
 Again, thanx. 
  
 Jason

Do you happen to have an email address I could send the files, too?  I think they’re too big for the upload… 
  
 Jason

Jason,


 For the issue of sending files, please, contact support@thinkgeo.com. They will set you up with an FTP account so that you can send your larger files and it will be private. Thank you.



Jason,


 I just had a meeting with the Development Team and one of the big themes we discussed was PDF output with printing. We uncovered various issues with that and we tasked the Development Team to work on the fixes. My suspicion and hope is that this will also fix the problems that you mention because they may be related.


 Thank you for listing clearly the issues you encountered. I will test them after the Development Team does the fixes. Of course, it would not hurt if you can send us a little sample. I will get back on your case first thing Wednesday.



I really appreciate that.  I’ve got something ‘working’ (by ditching my pngs in favor of character printing and ‘living with’ the flip-flopping orientation)…  It’s not perfect, but it’s getting me moving. 
  
 I’ve got a couple of different demos that I can send.  I’ve pulled out most of the ‘junk’ to just leave the pieces in question.  I’ll work on having that ready for you to review on Wednesday. 
  
 GREAT SUPPORT!  THANK YOU! 
  
 -Jaosn

Jason,


 I have not heard back from the Development Team on the printing PDF output issue. Let me check back with them this afternoon at the Support meeting and I will let you know. Thank you.



Jason,


 The Development Team will review this printing PDF output issue tomorrow. I expect we will have the fix early next week. I will let you know. Thank you for your patience.



I appreciate this VERY much.  Fixing the PDF printing will eliminate the majority of my issues. 
  
 I’ve decided to focus on using Webdings and Windings (i.e. fonts) for my symbols on the map.  They scale more easily than pngs and, at this point, don’t crash the app  :)  I’ve found symbols for most of the things I need.  If the pdf printing is made more reliable (i.e. doesn’t extend beyond the constraints of the box it’s in), then I’ll be pretty happy. 
  
 I actually figured out why the PDF wasn’t printing to the full size of the paper.  The ‘flip-flopping’ layout (landscape to portrait) is the ‘cause’…  When I have it printing in landscape, the screen I’m looking at has to appear in PORTRAIT for it to print properly.  If it’s not, the printout doesn’t look right.  I’ve got a very large example I can show you, if you’d like.  I’ll just need to contact support for that FTP site if you’d like to see it.  I can also send screenshots, if it would help. 
  
 Jason

Jason.


 yes, anything you can provide us will help us in fixing the problem. Please, contact support so that you can send your files. Thank you for your extra explanation on the "flip-flopping" layout issue. Having that additional info will help out team to narrow down the problem.



I have uploaded the files.  They contain a zip file (which has all of the project), an XLS file (used to zoom to an extent) and some screenshots/example PDFs. 



I apologize that the code is so sloppy.  I've been trying to work around the issue and haven't had a good chance to clean things up, yet. 



To test, I'd suggest the following: 

1) Run the project 

2) Go to File/Open XLS and open the XLS file..  This will zoom you to an extent 

3) File/Save to PDF 



Notice as you drag, zoom, etc, the 'black outline' of the printable page will toggle between landscape and portrait.  If you look at the included screenshot (screenshot1.jpg produces example1.pdf and screenshot2.jpg produces example2.pdf), you'll notice that when the APPLICATION looks right, the PDF comes out wrong.  And vice versa. 



If we get past that issue, the other items to consider are: 

1) If I try to print it straight to the printer, the app crashes.  Just re-enable the menu item to see that happen. 

2) Lines/symbols still go outside of the bounds of the 'map' area on the PDF. 

3) Symbols don't line up on the lines in the PDF exactly like they do on the screenshots. 

4) I've got another forum post about this, but maybe you can help:  The street names only show up ONCE on each street and I can't make them appear more often. 



I've got another example project, if you want to see it, that uses PNG files.  Whenever I try them, though, the app crashes.  If I don't use the printer layer, the PNG files work fine.  I've decided against PNG points, though, since they're not scalable.  Using font symbols is actually a much better solution for me  :) 



Again, I apologize for some of it.  The interface is still 'in progress' as well.  Trying to zoom in and pan around without using the XLS is painful, at the moment, since it only zooms/pans at like 5% at a time. 



Please let me know what you discover.  I'm hoping it's something rather stupid on my part that's easily fixable rather than something that will take time to develop a solution for  :)  I'm happy to provide any other information I can. 



Also, please note that some of the included shape files contain data not meant for general consumption. 



Thanx! 



Jason


EDIT:  I'm running this on Win7 in VS 2010, currently.  The Excel Interop stuff, especially, may need to be altered to include your version of the libs/Excel...



Jason,


 Thank you for the files and the sample app. I currently have the Development Team working on two printing issues:


-PDF output problems for printing


-Bug with IconStyle in priting


 By having those two issues fixed, I think this is going to take care of a lot of the issues you are seeing. I will get back to you as soon as the Development team as completed its tasks.


 Regarding your question on street name, there is a similar question in another recent post, please take a look. I htink this is going to answer your question. gis.thinkgeo.com/Support/Discussion...fault.aspx


I understand that the data you sent us by FTP is private. It will stay between ThinkGeo and your company.


Thank you.



Thanx!  I look forward to seeing updates. 
  
 Any thoughts on the page orientation issue?  That doesn’t seem to be covered under your 2 printing issues. 
  
 -Jason