Page truncate in right side for landscape orientation with trimmargins using PdfSharp

前端 未结 3 1715
忘掉有多难
忘掉有多难 2021-01-14 07:18

I am talking about PdfSharp. Portrait orientation works well with margin or without margin. But In case of landscape orientation, page truncate in right side once I set any

相关标签:
3条回答
  • 2021-01-14 07:36

    Could be a bug in PDFsharp.

    As a workaround, do not set the orientation to Landscape, instead swap width and height when creating the page.

    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;
    

    The default unit for margins is Points. To get e.g. millimetres instead, you can write:

    page.TrimMargins.Top = XUnit.FromMillimeter(5);
    page.TrimMargins.Right = XUnit.FromMillimeter(5);
    page.TrimMargins.Bottom = XUnit.FromMillimeter(5);
    page.TrimMargins.Left = XUnit.FromMillimeter(5);
    
    0 讨论(0)
  • 2021-01-14 07:39

    Yes, this is a bug of PdfSharp

    We can set the margins with orientation like bellow

    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;
    
    0 讨论(0)
  • 2021-01-14 07:42

    I had this same problem -- very frustrating. To anyone whom the top solution didn't work: try this!

    Since PDFSharp can only handle graphics and transformations properly on pages in portrait orientation, my work-around on my project was converting the landscape pages to portrait with .page.Rotate = 0 upon input. Remember that these files are now sideways so keep that in mind when applying graphics and transformations. Then before saving the file, I converted the page back to landscape with .page.Rotate = 90. Worked fine for me! Good luck y'all.

    0 讨论(0)
提交回复
热议问题