Я печатаю этикетки через принтер 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
, которое возвращает прямоугольник размера после применения полей, и так работаетидеально.