C# 使用PdfSharp在右侧截断页面以实现横向方向,并使用修剪边距

C# 使用PdfSharp在右侧截断页面以实现横向方向,并使用修剪边距,c#,asp.net,pdf,pdfsharp,C#,Asp.net,Pdf,Pdfsharp,我说的是PdfSharp。纵向定位在有边距或无边距的情况下效果良好。但在横向的情况下,一旦我使用TrimMargins设置了任何边距,页面就会在右侧截断。我在pdfSharp的示例代码上尝试了同样的方法,但遇到了同样的问题 请仔细查看以下代码 page = document.AddPage(); page.Size = PdfSharp.PageSize.A4; page.Orientation = PageOrientation.Landscape; gfx = XGraphics.FromP

我说的是PdfSharp。纵向定位在有边距或无边距的情况下效果良好。但在横向的情况下,一旦我使用TrimMargins设置了任何边距,页面就会在右侧截断。我在pdfSharp的示例代码上尝试了同样的方法,但遇到了同样的问题

请仔细查看以下代码

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);
你知道吗?
谢谢

可能是PDFsharp中的一个bug

作为一种解决方法,不要将方向设置为横向,而是在创建页面时交换宽度和高度

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

是的,这是PdfSharp的一个bug

我们可以像下面那样设置边距的方向

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;
我也有同样的问题——非常令人沮丧。对于那些顶级解决方案不起作用的人:试试这个

由于PDFSharp只能在纵向页面上正确处理图形和转换,因此我在项目中的工作是在输入时使用
.page.Rotate=0
将横向页面转换为纵向页面。请记住,这些文件现在是横向的,所以在应用图形和转换时请记住这一点。然后在保存文件之前,我使用
.page.Rotate=90
将页面转换回横向。对我来说很好!祝你们好运