Почему так сложно обнаружить этот волшебный прямоугольник?
В событии OnPrintPage у меня есть PrintPageEventArgs, и я пытаюсь рисовать, используя Graphics в пределах максимально допустимой области печати.
Я пробовал использовать PageBounds, PrintableArea, Graphics.VisibleClipBounds и т.д. Все не удается получить область рисования, особенно при переключении с Пейзаж на портретную. PrintableArea, похоже, никогда не меняется при переключении с Пейзаж на портрет.
Я также заметил, что существует разница в настройке Graphics.VisibleClipBounds в зависимости от того, выполняется ли предварительный просмотр печати и фактическая печать. В предварительном просмотре он всегда показывает ширину/высоту портрета, поэтому я должен проверить, является ли это предварительным просмотром, и мне приходится вручную менять ширину/высоту, когда это пейзаж.
Мне нужен алгоритм для вычисления области печати , поскольку она относится к текущему графическому контексту, а не к произвольной теоретической области печати, которая не используется в фактическом чертеже.
Моя проблема связана с смещением матрицы Graphics. До сих пор я заметил серьезные несоответствия между тем, как контекст Graphics предварительно транслируется с использованием жестких полей в зависимости от таких факторов, как:
- Если OriginAtMargins истинно или ложно (не так, как я думал)
- Если я печатаю на принтере или используя PrintPreviewControl (я должен проверить, является ли это печать для предварительного просмотра или печать на странице, чтобы правильно обрабатывать перевод)
- Если я использую мой принтер дома или мой принтер на работе (оба ведут себя по-другому)
Есть ли стандартный способ справиться с этим? Должен ли я просто reset матрица? Когда я устанавливаю OriginAtMargins в true, Графика предварительно переведена на 84,84, но моя маржа составляет 100 100. Твердые поля - 16,16. Не следует ли перевести его на 100 100? Так как 0,0 должно быть на границах страницы, а не на жестких полях.
В основном мой метод всегда должен работать над получением наилучшего печатаемого прямоугольника. Мне просто нужен последовательный независимый от устройства способ убедиться, что начало рисования (0, 0) находится в верхнем левом углу страницы, чтобы этот прямоугольник был мне полезен.