首页 文章

使用PdfSharp,使用trimmargins将页面截断在右侧以进行横向定向

提问于
浏览
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 回答

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

    边距的默认单位是Points . 得到例如毫米相反,你可以写:

    page.TrimMargins.Top = XUnit.FromMillimeter(5);
    page.TrimMargins.Right = XUnit.FromMillimeter(5);
    page.TrimMargins.Bottom = XUnit.FromMillimeter(5);
    page.TrimMargins.Left = XUnit.FromMillimeter(5);
    
  • 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;
    

相关问题