Печать с пользовательскими полями в .NET - PullRequest
4 голосов
/ 13 июня 2011

Я печатаю этикетки через принтер 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 Ответ

1 голос
/ 21 сентября 2012

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

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

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

...