2011-12-12 52 views
6

我正在创建一个Web应用程序,用于在我们的数据库中维护PDF文档,该文档通过自动系统在我们接收传真时进入。用户需要能够查看这些文档,他们需要能够处理这些文档的更常见的事情之一就是翻转/旋转各个页面,当他们以错误的方式放入传真机时。这几乎总是页面旋转180度。我创建了一个函数来做到这一点,这似乎工作,但只有第一次被调用。对这个函数的任何后续调用似乎都不再起作用。与这个函数相关的另一个奇怪的事情是,我还得到了另一个被调用的方法,它将在选定位置向文档添加一些文本。我传入文本和一些坐标,并将文本写入文档中的这些坐标,并且一切都很好。这里的问题是,文档旋转后(有一段时间,旋转),如果用户试图将文本添加到某个文档,似乎扭转它放置在文字的坐标,文字是颠倒的。PdfSharp:旋转文档中的页面

所有这一切告诉我,最终,我以某种方式做错了页面旋转。我似乎无法找到任何如何在PdfSharp文档中正确旋转页面的好例子,所以一些指导将非常有用,并且非常感谢。提前致谢。

这里是我目前使用的代码,旋转页面,并添加文本到页面:

// This is how I'm rotating the page... 
public PdfDocument FlipPage(byte[] documentSource, int pageNumber) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     stream.Write(documentSource, 0, documentSource.Length); 
     var document = PdfReader.Open(stream); 
     var page = document.Pages[pageNumber - 1]; 
     page.Rotate = 180; 

     return document; 
    } 
} 

// This is how I'm adding text to a page... 
public static void AddTextToPage(this PdfDocument document, int pageNumber, Annotation annotation) 
{ 
    var page = document.Pages[pageNumber - 1]; 
    annotation.TargetHeight = page.Height.Value; 
    annotation.TargetWidth = page.Width.Value; 

    var graphics = XGraphics.FromPdfPage(page); 
    var textFormatter = new XTextFormatter(graphics); 
    var font = new XFont("Arial", 10, XFontStyle.Regular); 
    graphics.DrawString(annotation.Text, font, XBrushes.Red, new PointF((float)annotation.TargetX, (float)annotation.TargetY)); 
} 
+0

选中此项:graphics.RotateTransform(180) –

+0

编译并成功,但对页面没有任何影响。 –

回答

6

这不是我的专业领域,但不是“page.Rotate = 180;”我想尝试类似的东西:

page.Rotate = (page.Rotate + 180) % 360; 

(代码没有测试,可能需要强制)

当添加文本,您可以测试“page.Rotate == 180”,并使用不同的代码,然后(如“graphics.RotateTransform(180)”)。

+0

Aahhh ...我没有考虑过在后续更新中检查*属性的想法。我会给你一个镜头,看看它是如何工作的。如果按预期工作,将其标记为正确。非常感谢。 –