Печать с пользовательскими полями в.NET

Я печатаю этикетки на принтере Dymo, используя vb.Net и стандартные процедуры печати.NET, но мое приложение должно поддерживать любой тип принтера этикеток. Поскольку у драйвера dymo нет доступных полей на панели управления, и панель управления в любом случае ограничена для большинства моих пользователей, я устанавливаю поля страницы с помощью приложения.

Я заменяю поля в PrintDocument, используя те, которые установлены в приложении, и это хорошо, но у меня также есть некоторый код для расчета размера и формата текста на основе ширины области печати. Я никогда не смогу заставить область печати изменить размер? Все, что делает настройка поля - это шунтирование всего Графика вниз и вправо на основе верхнего и левого полей, область печати и VisibleClipBounds в графическом объекте никогда не изменятся? Когда это происходит, текст просто вытекает из правой и нижней части страницы, поэтому он вообще не подчиняется правому и нижнему полям.

Это нормальное поведение? Нужно ли мне выполнять еще большую обработку в приложении, чтобы самостоятельно рассчитать область печати на основе моих полей и начального размера страницы?

'Code to setup PrintDocument
    MyDocument.DefaultPageSettings.Margins = New Margins(Printers.LabelPrinter.MarginLeft / 0.254, Printers.LabelPrinter.MarginRight / 0.254, Printers.LabelPrinter.MarginTop / 0.254, Printers.LabelPrinter.MarginBottom / 0.254)
    MyDocument.OriginAtMargins = True


'Code that runs during the MyDocument.Print event
    width = e.Graphics.VisibleClipBounds.Width
    height = e.Graphics.VisibleClipBounds.Height
    'Calculate best fit text size here and update graphics object

Решил это. Моя рутина просто использовала графический объект, а не полные события для события Print.

Событие печати содержит MarginBounds свойство, которое возвращает прямоугольник размера после применения полей, и поэтому работает отлично.

1 ответ

Решение

Решил это. Моя рутина была просто с помощью Graphics Объект, а не полные события для события Print.

Событие печати содержит MarginBounds свойство, которое возвращает прямоугольник размера после применения полей, и поэтому работает отлично.

(Добавил это в качестве ответа, так как на тот момент у него не было достаточно кредитов, и надеюсь, что это поможет людям, которые считают этот вопрос без ответа).

Другие вопросы по тегам