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
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...
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
: