Автоматическое масштабирование табличного документа при печати
Многие программисты сталкивались с проблемой масштабирования разрабатываемых печатных форм документов, то печатная форма вылазит вправо, то сиротливо ютится в углу страницы. В этой статье предоставлен алгоритм решающий эту проблему. Взято у andy-cj и исправлены ошибки.
- Описание
- Подробнее
Описание
Добрый день, друзья. В рамках решения одной из рабочих задач оптимимизации печати документов и был создан данный алгоритм. Несомненным преимуществом данного алгоритма является то, что пользователю не нужно мучаться с настройками масштаба печатной формы и подгонять ее под разные принтеры. Данный алгоритм обрабатывает две ситуации: первая — это когда количество страниц большое и уменьшением масштаба печати можно добиться максимального заполнения страниц (например: в конце табличного документа появляется «хвостик», который не влазит на предыдущую страницу и выводится в начале следующей, фактически последний лист выходит пустой), вторая ситуация — когда печатная форма занимает 1 лист, но заполнение не полное, в таком варианте алгоритм увеличивает масштаб печати до значения, позволяющего полностью заполнить печатный лист.
Хочу обратить внимание на то, что при выполнении алгоритма используются драйвера принтера, так что если в системе не установлено ни одного принтера, то выполнение функции вызовет исключение. Также было замечено, что обращение к функции «ТабДокумент.КоличествоСтраниц() » занимает продолжительное время, скорее всего из-за использования драйвера принтера для подсчета количества страниц. Просьба учесть вышеперечисленные моменты при использовании данного алгоритма.
Поцедуру можно поместить в общий модуль обработчиков печатных форм.
Процедура КорректировкаМасштабаТабДокумента(ТабДокумент,МинимальныйПроцентМасштаба=60) Экспорт
Если типЗнч(ТабДокумент)=Тип("ТабличныйДокумент") Тогда
//уменшение масштаба для уменьшения количества страниц
ИсходныйМасштаб = 100;
ТабДокумент.МасштабПечати = 100;
ИсходноеКоличествоСтраниц = ТабДокумент.КоличествоСтраниц();
ТабДокумент.МасштабПечати = МинимальныйПроцентМасштаба;
Если ТабДокумент.КоличествоСтраниц() Тогда
КоличествоОптимизированныхСтраниц = ТабДокумент.КоличествоСтраниц();
ТекущийПроцентМасштаба = МинимальныйПроцентМасштаба;
Пока КоличествоОптимизированныхСтраниц=ТабДокумент.КоличествоСтраниц() Цикл
ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;
ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;
КонецЦикла;
ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;
Иначе //эффекта нет возвращаем мастаб печати обратно
ТабДокумент.МасштабПечати = ИсходныйМасштаб;
//увеличение масштаба для максимального заполнения страниц
ТекущийПроцентМасштаба = ИсходныйМасштаб;
Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл
ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;
ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;
КонецЦикла;
ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

