Моя распечатка не похожа на предварительный просмотр, когда я использую Transform - PullRequest
0 голосов
/ 09 апреля 2009

Я пытаюсь распечатать DataGridView, используя PrintDocument. В моем обработчике событий PrintPage я использую объект e.Graphics, чтобы нарисовать некоторые линии сетки, а затем распечатать некоторый текст в созданных «ячейках» - кроме этого, это действительно должно было быть сделано Microsoft, но я отступаю.

Во всяком случае, это работает просто отлично. PrintDocument привязан к PrintPreviewDialog, и когда я открываю его, DGV отображается правильно. Пользователь может нажать кнопку печати в диалоговом окне «Просмотр» и получить распечатку. Моя проблема в том, что иногда DGV слишком широка для страницы, поэтому я хотел бы иметь возможность масштабировать его (только по горизонтали), чтобы соответствовать. Я звоню

e.Graphics.ScaleTransform(printableWidth / gridWidth)

прежде чем я начну что-то рисовать. Это делает предварительный просмотр именно таким, каким я его хочу, но по какой-то причине фактическая распечатка выглядит точно так же, как и до добавления кода для масштабирования - если отчет слишком широкий, он просто падает со стороны страница!

Есть ли какая-то разница между способом обработки события PrintPage для предварительного просмотра и способом его отправки на принтер? Может ли мой обычный офисный лазерный принтер PostScript не справиться с функцией ScaleTransform? Я бы подумал, что он должен просто слепо печатать то, что ему было отправлено, но, возможно, в этом задействовано больше обработки, чем я думал.

1 Ответ

0 голосов
/ 09 апреля 2009

ОК, я нашел свою проблему - я думал, что вызывал ScaleTransform для каждой страницы, но оказалось, что он фактически выполнялся только при первом вызове обработчика PrintPage. Последующие вызовы были пропущены через линию из-за условного, в котором она была заключена. Так что слово для мудрых - убедитесь, что если вы хотите преобразовать свою распечатку, вы делаете это независимо для каждой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...