У меня есть форма, главной панелью которой является FlowLayoutPanel, и это именно то, что я хочу напечатать (она разработана так, чтобы выглядеть как красиво отформатированный документ... без кнопок и т. д.... вы щелкаете правой кнопкой мыши для команд).
Итак, я использую DrawToBitmap для реализации печати почти бесплатно... Я просто изменяю размер формы таким образом, чтобы основная панель соответствовала размеру листа бумаги, на котором пользователь хочет печатать (минус поля), что приводит к автоматическому течь его содержимое должным образом для этого размера. Затем я просто использую DrawToBitmap для отображения этого FlowLayoutPanel и всего его содержимого на печатной странице. Я даже могу масштабировать, чтобы соответствовать размеру окна, увеличив его размер до размера страницы (такое же соотношение сторон), а затем уменьшив размер растрового изображения, которое я получаю от DrawToBitmap. Работает отлично...
НО это работает, только если ваш экран больше, чем размер страницы! Потому что любая попытка изменить размер формы или элемента управления больше, чем размер экрана + 12 пикселей в любом направлении, будет сорвана.
Фу!! Зачем дразнить меня простотой и полезностью DrawToBitmap, если вы собираетесь убить его применимость, отказавшись изменять размер больше экрана? (риторический)
Мои вопросы:
Есть ли способ обойти это ограничение и заставить форму или FlowLayoutPanel изменить размер больше, чем экран?
Если нет, есть ли способ добраться до прокручиваемой поверхности FlowLayoutPanel (а не только той части, которая прокручивается в поле зрения), чтобы я мог изменить ее размер в соответствии с печатной страницей и чтобы я мог вызвать на ней DrawToBitmap?
Если нет, есть ли другой способ использовать мои существующие функции макета для печати? Или я застрял, по сути, переписывая весь этот код WinForms только для того, чтобы сгенерировать тот же растровый рисунок, который он уже сгенерирует, если мой экран больше, чем моя печатная страница?