How to Set Document Orientation (for All Pages) in MigraDoc Library?

11,376

Assign DefaultPageSetup.Clone() to the PageFormat of your section and modify that.

Then you modify a copy of the default settings and no assertion will fail.

With your approach, all documents would default to landscape - not just the document you set it for.

This answer applies to MigraDoc only as only MigraDoc uses DefaultPageSetup.

See this post in the PDFsharp forum where Clone() is used to create a copy of the DefaultPageSetup:

Share:
11,376
Shiva
Author by

Shiva

I'm the founder @ Stack Squad https://www.thestacksquad.com/ If you want to Live, Breath Sitecore, get in touch!

Updated on June 07, 2022

Comments

  • Shiva
    Shiva about 2 years

    I'm using MigraDoc to programatically generate a PDF file with text, images and tables.

    I need to set Document Orientation (for all pages) in the document object to Landscape.

    So I tried the following.

    document.DefaultPageSetup.Orientation = Orientation.Landscape;
    

    But I get the following debug assertion error.

    ---------------------------
    Assertion Failed: Abort=Quit, Retry=Debug, Ignore=Continue
    ---------------------------
    
    DefaultPageSetup must not be modified
    

    If I click Ignore, it goes through and the Orientation is indeed Landscape.

    However, I want to make sure I am doing this the right way.

    So the question is, how do I set the document orientation for all pages in a Document using the MigraDoc library?

    Here's the rest of the code (so it helps you get the context)

    using System.Runtime.Remoting.Messaging;
    using MigraDoc.DocumentObjectModel;
    
    namespace MyNamespace.PdfReports
    {
        class Documents
        {
            public static Document CreateDocument()
            {
                // Create a new MigraDoc document
                Document document = new Document();
                document.Info.Title = "The Title";
                document.Info.Subject = "The Subject";
                document.Info.Author = "Shiva";
                document.DefaultPageSetup.Orientation = Orientation.Landscape;
    

    Many thanks!
    -Shiva

    UPDATE:

    SOLUTION: Here's the working code, based on Thomas' answer below (for the benefit of others who maybe looking for this solution).

    // Create a new MigraDoc document
    Document document = new Document();
    //...
    //......
    PageSetup pageSetup = document.DefaultPageSetup.Clone();
    // set orientation
    pageSetup.Orientation = Orientation.Landscape;
    // ... set other page setting you want here...
    
  • Shiva
    Shiva over 10 years
    Thanks Thomas! Based on your answer and the link, I fixed the code to clone the DefaultPageSetup and apply the setting on that. Updated my question with the code also.