Вопрос по pdfsharp, asp.net, c#, pdf – Обрезка страницы с правой стороны для альбомной ориентации с помощью обрезки с помощью PdfSharp

3

Я говорю о PdfSharp. Портретная ориентация хорошо работает с полями или без полей. Но в случае альбомной ориентации, страницы обрезаются с правой стороны, как только я установил любое поле, используя TrimMargins. Я пробовал то же самое на примере кода pdfSharp и с той же проблемой!

Посмотрите pdf, отрендеренный для следующего кода

page = document.AddPage();
page.Size = PdfSharp.PageSize.A4;
page.Orientation = PageOrientation.Landscape;
gfx = XGraphics.FromPdfPage(page);
gfx.DrawString("A4 (landscape)", font,XBrushes.DarkRed, new XRect(0, 0, page.Width, page.Height),XStringFormats.Center);

Но для следующего кода PDF не отображается хорошо, обрезать в правой части

page = document.AddPage();
page.TrimMargins.Top = 5;
page.TrimMargins.Right = 5;
page.TrimMargins.Bottom = 5;
page.TrimMargins.Left = 5;
page.Size = PdfSharp.PageSize.A4;
page.Orientation = PageOrientation.Landscape;
gfx = XGraphics.FromPdfPage(page);
gfx.DrawString("A4 (landscape)", font,XBrushes.DarkRed, new XRect(0, 0, page.Width, page.Height),XStringFormats.Center);

Есть идеи? Спасибо

Ваш Ответ

2   ответа
1

Да, это ошибка PdfSharp

Мы можем установить поля с ориентацией, как показано ниже

page = document.AddPage();
//page.Size = PdfSharp.PageSize.A4;
XSize size = PageSizeConverter.ToSize(PdfSharp.PageSize.A4);
if(page.Orientation == PageOrientation.Landscape)
{
   page.Width  = size.Height;
   page.Height = size.Width;
}
else
{
   page.Width  = size.Width;
   page.Height = size.Height;
}

// default unit in points 1 inch = 72 points
page.TrimMargins.Top = 5;
page.TrimMargins.Right = 5;
page.TrimMargins.Bottom = 5;
page.TrimMargins.Left = 5;
2

Может быть ошибка в PDFsharp.

Как обходной путь, не устанавливайте ориентацию в Пейзаж, вместо этого меняйте ширину и высоту при создании страницы.

page = document.AddPage();
//page.Size = PdfSharp.PageSize.A4;
XSize size = PageSizeConverter.ToSize(PdfSharp.PageSize.A4);
page.MediaBox = new PdfRectangle(new XPoint(0, 0), new XPoint(size.Height, size.Width)); // Magic: swap width and height
//page.Orientation = PageOrientation.Landscape;

Единицей по умолчанию для полей является Очки. Например, чтобы получить вместо миллиметра вы можете написать:

page.TrimMargins.Top = XUnit.FromMillimeter(5);
page.TrimMargins.Right = XUnit.FromMillimeter(5);
page.TrimMargins.Bottom = XUnit.FromMillimeter(5);
page.TrimMargins.Left = XUnit.FromMillimeter(5);

Похожие вопросы