При работе с платформой 1С 7.7 часто возникает задача экспортных операций, связанных с сохранением печатных форм в формат PDF. Главное сложность заключается в том, чтобы сформированная таблица гарантированно помещалась на один лист по высоте и ширине. Разберем ограничения платформы 1С 7.7 и рассмотрим практические варианты решения этой задачи с использованием доступных механизмов и сторонних библиотек.
Проанализируем работу метода ПараметрыСтраницы таблицы 1С 7.7. Метод содержит параметр Автомасштаб (10-й параметр), однако в платформе 7.7 он работает только для подгона по ширине листа. Автоматического штатного режима «уместить на 1 страницу по высоте» в 1С 7.7 не предусмотрено.
Однако мы можем задать явный процент масштабирования во 2-м параметре метода ПараметрыСтраницы:
// Выключение автомасштаба по ширине и установка явного масштаба 75%
Таб.ПараметрыСтраницы(1, 75, , , , , , , , 0);
Обратим внимание, что настройки страницы в 1С 7.7 сохраняются в системном реестре Windows для текущего пользователя. Поэтому перед выводом печатной формы всегда следует явным образом переопределять или сбрасывать параметры таблицы в коде.
Одним из наиболее эффективных решений в 1С 7.7 является использование внешнего компонента Yoksel. Он позволяет конвертировать табличные документы в PDF с произвольным управлением размерами страницы.
Рассмотрим алгоритм решения с помощью Yoksel по шагам:
ТабличныйДокумент Yoksel.ВысотаСтроки() и ШиринаСтолбца().Йоксель.ГрафическийКонвертер.PDF и вычисляем размеры страницы в твипах пропорционально полученной ширине и высоте.
// Пример логики работы с компонентом Yoksel
Йоксель = СоздатьОбъект("Йоксель.ГрафическийКонвертер.PDF");
// Пересчитываем твипы под размеры сформированной таблицы
// и сохраняем ТабличныйДокумент в файл
Выясним, как настроить фоновую (тихую) печать на виртуальный PDF-принтер без показа диалоговых окон пользователю. Для этого подходят виртуальные принтеры с поддержкой программного управления (Bullzip PDF Printer, PDFCreator, PDFill PDF Writer).
Рассмотрим пример настройки сохранения через Bullzip PDF Printer:
Bullzip.PDFPrinterSettings.output и отключаем вызов диалоговых окон (ShowSaveAS = "never", ShowProgress = "no", ShowPDF = "no").ПараметрыСтраницы.Таблица.Напечатать(0).
// Настройка Bullzip через COM
ПринтерСеттингс = СоздатьОбъект("Bullzip.PDFPrinterSettings");
ПринтерСеттингс.SetValue("output", "C:\Reports\Document.pdf");
ПринтерСеттингс.SetValue("ShowSaveAS", "never");
ПринтерСеттингс.SetValue("ShowProgress", "no");
ПринтерСеттингс.SetValue("ShowPDF", "no");
ПринтерСеттингс.SetValue("ConfirmOverwrite", "no");
ПринтерСеттингс.WriteSettings(1);
// Вывод из 1С 7.7 с фиксированным масштабом
Таб.ПараметрыСтраницы(1, 70, , , , , , , , 0, , "Bullzip PDF Printer");
Таб.Напечатать(0);
Если в инфраструктуре предприятия параллельно используется платформа 1С 8.х, мы можем применить ее развитые функции масштабирования табличных документов.
Посмотрим, как реализовать эту схему:
Таблица.Записать(ИмяФайла, "MXL").V83.COMConnector).АвтоМасштаб = Истина и ПоШиринеСтраницы = Истина.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF).При выборе подходящего метода проанализируем содержимое печатных форм: