Я пытаюсь распечатать DataGridView, используя PrintDocument. В моем обработчике событий PrintPage я использую объект e.Graphics, чтобы нарисовать некоторые линии сетки, а затем распечатать некоторый текст в созданных «ячейках» - кроме этого, это действительно должно было быть сделано Microsoft, но я отступаю.
Во всяком случае, это работает просто отлично. PrintDocument привязан к PrintPreviewDialog, и когда я открываю его, DGV отображается правильно. Пользователь может нажать кнопку печати в диалоговом окне «Просмотр» и получить распечатку. Моя проблема в том, что иногда DGV слишком широка для страницы, поэтому я хотел бы иметь возможность масштабировать его (только по горизонтали), чтобы соответствовать. Я звоню
e.Graphics.ScaleTransform(printableWidth / gridWidth)
прежде чем я начну что-то рисовать. Это делает предварительный просмотр именно таким, каким я его хочу, но по какой-то причине фактическая распечатка выглядит точно так же, как и до добавления кода для масштабирования - если отчет слишком широкий, он просто падает со стороны страница!
Есть ли какая-то разница между способом обработки события PrintPage для предварительного просмотра и способом его отправки на принтер? Может ли мой обычный офисный лазерный принтер PostScript не справиться с функцией ScaleTransform? Я бы подумал, что он должен просто слепо печатать то, что ему было отправлено, но, возможно, в этом задействовано больше обработки, чем я думал.