How to Set Document Orientation (for All Pages) in MigraDoc Library?
c#, migradoc, pdf-generation
Solution
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`:
Problem
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... ```