Каталог решений - Автоматическое масштабирование табличного документа при печати

Автоматическое масштабирование табличного документа при печати

Автоматическое масштабирование табличного документа при печати

В наличии

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

Категория:

Описание

Добрый день, друзья. В рамках решения одной из рабочих задач оптимимизации печати документов и был создан данный алгоритм. Несомненным преимуществом данного алгоритма является то, что пользователю не нужно мучится с настройками масштаба печатной формы и подгонять ее под разные принтеры. Данный алгоритм обрабатывает две ситуации, первая это когда количество страниц большое и уменьшением масштаба печати можно добиться максимального заполнения страниц (например в конце табличного документа появляется «хвостик», который не влазит на предыдущую страницу и выводится в начале следующей, фактически последний лист выходит пустой), вторая ситуация когда печатная форма занимает 1 лист, но заполнение не полное, в таком варианте алгоритм увеличивает масштаб печати, до значения позволяющего полностью заполнить печатный лист.
      Хочу обратить внимание, на то что при выполнении алгоритма используются драйвера принтера, и если в системе не установлено ни одного принтера выполнение функции вызовет исключение. Также было замечено что обращение к функции «ТабДокумент.КоличествоСтраниц() » занимает продолжительное время, скорее всего из-за использования драйвера принтера для подсчета количества страниц. Просьба учесть вышеперечисленные моменты при использовании данного алгоритма.

      Поцедуру можно поместить в общий модуль обработчиков печатных форм.

 

Процедура КорректировкаМасштабаТабДокумента(ТабДокумент,МинимальныйПроцентМасштаба=60) Экспорт

    Если типЗнч(ТабДокумент)=Тип(«ТабличныйДокумент») Тогда

        //уменшение масштаба для уменьшения количества страниц

        ИсходныйМасштаб = 100;

        ТабДокумент.МасштабПечати = 100;

        ИсходноеКоличествоСтраниц = ТабДокумент.КоличествоСтраниц();

        ТабДокумент.МасштабПечати = МинимальныйПроцентМасштаба;

        Если ТабДокумент.КоличествоСтраниц()

            КоличествоОптимизированныхСтраниц = ТабДокумент.КоличествоСтраниц();

            ТекущийПроцентМасштаба = МинимальныйПроцентМасштаба;

            Пока КоличествоОптимизированныхСтраниц=ТабДокумент.КоличествоСтраниц() Цикл

                ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;

                ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;

            КонецЦикла;

            ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати—1;

        Иначе //эффекта нет возвращаем мастаб печати обратно

            ТабДокумент.МасштабПечати = ИсходныйМасштаб;

            //увеличение масштаба для максимального заполнения страниц

            ТекущийПроцентМасштаба = ИсходныйМасштаб;

            Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл

                ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;

                ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;

            КонецЦикла;

            ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати—1;

        КонецЕсли;

    КонецЕсли;

КонецПроцедуры

has been added to your cart:
Оформление заказа