PdfSharp - неверные настройки страницы PDF при открытии документа в Acrobat - PullRequest
7 голосов
/ 24 августа 2009

Я написал фрагмент кода, который использует библиотеку PdfSharp. Созданный экземпляр PdfSharp.Pdf.PdfDocument сохраняет на диск, как и ожидалось. Отображается правильный контент, но на неправильных настройках страницы.

Настройки страницы по умолчанию для PdfSharp:

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

Моя проблема в том, что эти настройки, кажется, переопределяют необходимые настройки.

Я создаю экземпляр класса PdfDocument и добавляю новый экземпляр класса PdfPage к его свойству коллекции Pages. Затем я настраиваю страницу следующим образом:

  1. PdfDocument.Pages [0] .Size = PdfSharp.PageSizes.Letter
  2. PdfDocument.Pages [0] .Orientation = PdfSharp.PageOrientation.Landscape
  3. Я рисую строки (это прекрасно работает)
  4. Я сохраняю документ на диск (это нормально работает)
  5. Process.Start (myPdfFilename) - после этого открывается Acrobat Reader с моим документ.
  6. Настройки страницы: А4 - Портрет ...

Я в замешательстве. Мне известна опция в Acrobat Reader, которая позволяет пользователю изменять ориентацию страницы без изменения направления текста. Независимо от того, проверяю я эту опцию или нет, неверные настройки продолжают работать.

У кого-нибудь есть идея? Спасибо!

Ответы [ 2 ]

8 голосов
/ 24 августа 2009

По какой-то странной причине, PdfSharp, кажется, не ведет себя одинаково с обоими следующими:

Пример 1. Похоже, он не связывает экземпляр класса PdfPage с PdfDocument, даже если параметры страницы верны при вызове и после вызова метода PdfDocument.Save ().

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

Пример 2 - То же самое здесь ...

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);

Пример 3 - Кажется, это решило мою проблему

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);

Кто-нибудь знает, что мне здесь не хватает? Похоже, я делаю то же самое в любом из этих примеров, насколько я понимаю.

Решение:

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);

Сначала установите размер.

Спасибо за любые комментарии и / или ответы!

6 голосов
/ 25 августа 2009

Я исследовал эту проблему. Кажется, вы должны установить «page.Size» перед настройкой «page.Orientation» в альбомной ориентации. Это ошибка, потому что порядок здесь не имеет значения.

Порядок имеет значение, но обходной путь прост: поменяйте местами 2 строки в Примере 1, и все готово (кстати: нет необходимости устанавливать Rotate в 0).

PDFsharp Forum:
http://forum.pdfsharp.net/

...