PdfSharp - Wrong PDF page settings when document is opened in Acrobat

Will Marcouiller picture Will Marcouiller · Aug 24, 2009 · Viewed 14.5k times · Source

I have written a piece of code which uses the PdfSharp library. The instance of PdfSharp.Pdf.PdfDocument created saves to disk as expected. The right content is displayed, but onto the wrong page settings.

The default page settings for PdfSharp are:

  1. PdfSharp.PageSizes.A4
  2. PdfSharp.PageOrientation.Portrait

My problem is that these settings seem to override the required settings.

I create the instance of PdfDocument class and adds a new instance of PdfPage class to its Pages collection property. Then, I setup the page like this:

  1. PdfDocument.Pages[0].Size = PdfSharp.PageSizes.Letter
  2. PdfDocument.Pages[0].Orientation = PdfSharp.PageOrientation.Landscape
  3. I draw the strings (this works fine)
  4. I save the document to disk (this works fine)
  5. Process.Start(myPdfFilename) - then Acrobat Reader opens with my document.
  6. The page settings are A4 - Portrait...

I'm quite confused. I know of an option within Acrobat Reader that allows the user to change the page orientation without changing the text direction. No matter whether I check this option or not, still the wrong settings keep going.

Anyone has an idea? Thanks!

Answer

Will Marcouiller picture Will Marcouiller · Aug 24, 2009

For some strange reason, PdfSharp seems not to behave the same with both the following:

Example 1 - It doesn't seem to associate the instance of PdfPage class to the PdfDocument even though the page settings are correct while calling and after having called the PdfDocument.Save() method.

var pdfDoc = new PdfDocument();
var pdfPage = pdfDoc.AddPage();
pdfPage.Orientation = PdfSharp.PageOrientation.Landscape;
pdfPage.Size = PdfSharp.PageSize.Letter;
pdfPage.Rotate = 0;
pdfDoc.Save(filename);

Example 2 - The same here...

var pdfDoc = new PdfDocument();
pdfDoc.Pages.Add();
pdfDoc.Pages[0].Orientation = PdfSharp.PageOrientation.Landscape;
pdfDoc.Pages[0].Size = PdfSharp.PageSize.Letter;
pdfDoc.Pages[0].Rotate = 0;
pdfDoc.Save(filename);

Example 3 - This seems to have solved my problem

var pdfPage = new PdfPage();
pdfPage.Orientation = PdfSharp.PageOrientation.Landscape;
pdfPage.Size = PdfSharp.PageSize.Letter;
pdfPage.Rotate = 0;
var pdfDoc = new PdfDocument();
pdfDoc.Pages.Add(pdfPage);
pdfDoc.Save(filename);

Anyone has any idea of what am I missing here? I seem to do the same in either of these examples, as far as I'm concerned.

Solution is:

var pdfPage = new PdfPage();
pdfPage.Size = PdfSharp.PageSize.Letter;
pdfPage.Orientation = PdfSharp.PageOrientation.Landscape;
pdfPage.Rotate = 0;
var pdfDoc = new PdfDocument();
pdfDoc.Pages.Add(pdfPage);
pdfDoc.Save(filename);

Set size first.

Thanks for any comments and/or answers!