【问题标题】:PdfSharp: Rotating a Page in a documentPdfSharp:在文档中旋转页面
【发布时间】:2011-12-12 20:07:19
【问题描述】:

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

所有这些都告诉我,最终,我在某种程度上做错了页面旋转。我似乎找不到任何关于如何以 正确 方式在 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));
}

【问题讨论】:

  • 检查这个:graphics.RotateTransform(180)
  • 编译成功,但对页面没有任何作用。

标签: c# pdfsharp


【解决方案1】:

这不是我的专业领域,而是“page.Rotate = 180;”我会尝试这样的事情:

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

(代码未经测试,可能需要强制转换)

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

【讨论】:

  • Aahhh...我没有考虑在后续更新中检查该属性的想法。我会试一试,看看它是如何工作的。如果它按预期工作,将其标记为正确。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2017-11-18
相关资源
最近更新 更多