使用PDFsharp旋转PDF而不截断内容

时间:2015-03-01 22:46:35

标签: c# pdf rotation pdfsharp portrait

旋转到纵向视图后,我如何确保所有内容都可见(在页面范围内)?

PDFsharp在旋转+90度时截断我的页面,但在旋转-90度时不截断。

PdfDocument outputDocument = new PdfDocument();
XPdfForm old = XPdfForm.FromFile(in_filename);
PdfPage newP = outputDocument.AddPage();

if (old.Page.Orientation == PageOrientation.Landscape)
{
    old.Page.Rotate= (old.Page.Rotate - 90) % 360;
    old.Page.Orientation = PageOrientation.Portrait;
}

newP.Height = old.Page.Height;
newP.Width = old.Page.Width;

// Get a graphics object for page1
XGraphics gfx = XGraphics.FromPdfPage(newP);

// Draw the page identified by the page number like an image
gfx.DrawImage(old, new XRect(0, 0, old.PointWidth, old.PointHeight));

以上是针对一些pdf测试用例的,但我怀疑它是巧合/运气

我正在使用PDFsharp 1.50 beta。

2 个答案:

答案 0 :(得分:1)

对于导入旋转的PDF,PDFsharp 1.50 beta 存在已知问题。这个问题仍在调查中。

PDF文件有许多不同的版本,因此很难确保代码在所有情况下都能正常工作。

答案 1 :(得分:0)

我最终做了以下事情: (请注意,这只适用于将风景肖像化)

        var output = new PdfDocument();
        var outputPage = output.AddPage();            

        using (var stream = new MemoryStream(Convert.FromBase64String(pdfBase64String)))
        {
            using (var input = XPdfForm.FromStream(stream))
            {
                outputPage.Height = input.PointWidth;
                outputPage.Width = input.PointHeight;

                using (var graphics = XGraphics.FromPdfPage(outputPage))
                {
                    graphics.RotateAtTransform(90, new XPoint(input.PointHeight / 2, input.PointHeight / 2));
                    graphics.DrawImage(input, new XRect(0, 0, input.PointWidth, input.PointHeight));

                }

            }
        }