PdfSharp: поворот страницы в документе

Я создаю веб-приложение, которое будет использоваться для хранения 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));
}

person Bob Yexley    schedule 12.12.2011    source источник
comment
проверьте это: graphics.RotateTransform (180)   -  person Reza ArabQaeni    schedule 13.12.2011
comment
Это компилируется и выполняется успешно, но вообще ничего не делает со страницей.   -  person Bob Yexley    schedule 13.12.2011


Ответы (1)


Это не моя область знаний, но вместо "page.Rotate = 180;" Я бы попробовал что-то вроде этого:

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

(код не тестировался, может потребоваться приведение)

При добавлении текста вы можете проверить «page.Rotate == 180» и использовать другой код (например, «graphics.RotateTransform (180)»).

person I liked the old Stack Overflow    schedule 13.12.2011
comment
Аааа... Я не рассматривал идею проверки этого свойства при последующих обновлениях. Я попробую и посмотрю, как это работает. Отметит это как правильное, если оно работает должным образом. Большое спасибо. - person Bob Yexley; 13.12.2011