ХОТЕЛКА: Сервис.ШиринаКолонкиТаблицы

Автор Злоп, 15 июня 2024, 03:06

« назад - далее »

Злоп

Вот есть Сервис.ВысотаСтрокиТаблицы()
а почему нет Сервис.ШиринаКолонкиТаблицы() аналогично (в мм, пунктах, твипах)..?
.
как посчитать ширину печатной формы в мм? чтобы как-то пересчитать это в твипы для конвертера ПДФ йоксельного?

sau

Тоже игрался с Йокселелем для PDF... Постоянные проблемы с угаданием размеров.
Сделал через "Microsоft Print To PDF". Создал (скопировал) еще один такой принтер (назвал PrintToPDF), выставил постоянное имя и место файла. Делал через com-объект Foxit Readera. Тоже ничего, но хуже.
Пример кода:
Сервис=СоздатьОбъект("Сервис");
Если Сервис.АктивныйКонтекст(КонтТаблицы)=1 Тогда
      Если ТипЗначенияСтр(КонтТаблицы)="Таблица" Тогда
         ПДФ=0;
         Принтеры=Сервис.ПолучитьСписокПринтеров();
         Поз=Принтеры.НайтиЗначение("PrintToPDF");
         Если Поз=0 Тогда
            Сообщить("Принтер PrintToPDF не найден!!!");
         Иначе
            ФС.УдалитьФайл("d:\print\print.pdf");
            КонтТаблицы.ПараметрыСтраницы(,,,,,,,,,,,"PrintToPDF");
            КонтТаблицы.Напечатать(0);
            чЧас=0;
            чМин=0;
            чСек=0;
            ТекущееВремя(чЧас,чМин,чСек);
            чТекущее=ВремяВСекундах(чЧас,чМин,чСек,0);
            чСтоп=ВремяВСекундах(чЧас,чМин,чСек,30);
            чФлаг=0;
            Пока чТекущее<чСтоп Цикл
               Если ФС.СуществуетФайл("d:\print\print.pdf")=1 Тогда
                  Сервис.Пауза(1000);
                  чФлаг=1;
                  Прервать;
               КонецЕсли;
               Сервис.Пауза(1000);
               ТекущееВремя(чЧас,чМин,чСек);
               чТекущее=ВремяВСекундах(чЧас,чМин,чСек,0);
            КонецЦикла;
            Если чФлаг=0 Тогда
               Сообщить("Не удалось создать PDF документ");
            Иначе
               Если ФС.СуществуетФайл("d:\print\print.pdf")=1 Тогда
                  ПДФ=1;
//Делаем что надо
               КонецЕсли;
            КонецЕсли;
         КонецЕсли;
        Иначе
            Сообщить("Активное окно не является таблицей.");
      КонецЕсли;
   КонецЕсли;

Злоп

В Йокселе можно ширину колокни в твипах получить

sau

Я же и пишу, что всегда проблема с пересчетом была, тем более для таблиц с масштабированием "По ширине страницы". А так всегда "как есть".

Злоп

как печформу, которая, например, шире чем А4 при 100% масштаба и у которой стоит автомасштабирование в параметрах страницы - как ее смасштабировать чтобы положить Йокселем в ширину А4 - не знаю. Если есть какие-то наметки, даже если криво считает/проблемы с пересчетом - поделись, плиз...

Djelf

Да там и пересчета особенно никакого не требуется.
Ширина=0; Высота=0;
ТабличныйДокумент.Область().РассчитатьРазмеры(Ширина, Высота);
Конвертер = СоздатьОбъект("Йоксель.ГрафическийКонвертер.PDF");
Конвертер.Документ = ТабличныйДокумент;
ПолеВТвипах = 10*56.7; //~10мм
Конвертер.ШиринаСтраницы = Ширина+ПолеВТвипах*2;
Конвертер.ПолеСлева      = ПолеВТвипах;
Конвертер.ПолеСправа     = ПолеВТвипах;
//Конвертер.ВысотаСтраницы=Высота; //сам думай что делать с многострочными документами...
Конвертер.ЗаписатьВФайл(ИмяФайла);