как программно развернуть лист в альбомный?

Автор aatm, 5 сентября 2012, 09:44

0 Пользователи и 1 гость просматривают эту тему.

aatm

есть функция сохраняющая в PDF через Open Office

Если НЕ ЗначениеЗаполнено(ПутьВыгрузки) Тогда
       ПутьВыгрузки = КаталогВременныхФайлов();
   КонецЕсли;  
   ПутьВыгрузки         = ?(Прав(ПутьВыгрузки, 1) = "\", ПутьВыгрузки, ПутьВыгрузки + "\");
 
   РасширениеXSL         = ".xls";
   РасширениеPDF         = ".pdf";
   ПолноеИмяФайлаXLS     = ПутьВыгрузки + ИмяФайлаБезРасширения + РасширениеXSL;
   //Выгрузка данных печати в файл XLS  

#Если Клиент Тогда

   Состояние("Создание временного файла...");
#КонецЕсли

   Попытка
       Если         ТипЗнч(ДанныеВыгрузки) = Тип("ТабличныйДокумент") Тогда        
           ДанныеВыгрузки.Записать(ПолноеИмяФайлаXLS, "XLS");
       ИначеЕсли     ТипЗнч(ДанныеВыгрузки) = Тип("ТекстовыйДокумент") Тогда
           ДанныеВыгрузки.Записать(ПолноеИмяФайлаXLS, "XLS");
       Иначе
#Если Клиент Тогда

           Сообщить("Данные для выгрузки переданы в неподдерживаемом формате. Дальнейшее выполнение невозможно." + Символы.ПС + ОписаниеОшибки());
#КонецЕсли

           Возврат 0;
       КонецЕсли;
   Исключение
#Если Клиент Тогда

       Сообщить("Произошла ошибка при выгрузке временного файла. Возможно ошибка доступа к папке, в которую происходит запись." + Символы.ПС + ОписаниеОшибки());
#КонецЕсли

       Возврат 0;
   КонецПопытки;
 
   Попытка
#Если Клиент Тогда

       Состояние("Открытие компоненты OpenOffice...");
#КонецЕсли

       ServiceManager    = Новый COMОбъект("com.sun.star.ServiceManager");      
     
       Скрипт             = Новый COMОбъект("MSScriptControl.ScriptControl");
       Скрипт.language    = "javascript";
       Скрипт.AddObject("OpenOffice", ServiceManager);
     
       //Открытие временного файла без отображения его окна

#Если Клиент Тогда          

       Состояние("Открытие временного файла...");
#КонецЕсли

       Скрипт.eval("Массив=new Array()");      
       Массив             = Скрипт.eval("Массив");  
       Скрипт.eval("Массив[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
       Скрипт.eval("Массив[0].Name     = 'Hidden'");
       Скрипт.eval("Массив[0].Value = true");
     
       Скрипт.AddCode("function SetItem(ind,val){Массив[ind]=val}");      
       Скрипт.AddObject("ServiceManager",ServiceManager);
       Desktop         = ServiceManager.createInstance("com.sun.star.frame.Desktop");      
       Document         = Desktop.LoadComponentFromURL("file:///" + ПолноеИмяФайлаXLS, "_blank", 0, Массив);

   
   
       
   Стили = Document.StyleFamilies.getByName("PageStyles");
   Для поз = 0 по Стили.count - 1 Цикл
       МойСтиль = Стили.getByIndex(поз);
       МойСтиль.ScaleToPagesX= 1; // уместить на одной странице вширь

       //МойСтиль.PageScale = 50; // масштаб 50%

   КонецЦикла;        
       //Сохранение в PDF встроенными средствами OpenOffice

#Если Клиент Тогда          

       Состояние("Запись в PDF...");
#КонецЕсли

       Скрипт.eval("Массив2=new Array()");      
       Массив2     = Скрипт.eval("Массив2");      
       Скрипт.eval("Массив2[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");      
       Скрипт.eval("Массив2[0].Name  = 'FilterName'");
       Скрипт.eval("Массив2[0].Value = 'writer_pdf_Export'");
     
       ПолноеИмяФайлаPDF         = "file:///" + СтрЗаменить(ПолноеИмяФайлаXLS, РасширениеXSL, РасширениеPDF);

       ПолноеИмяФайлаPDF         = СтрЗаменить(ПолноеИмяФайлаPDF, ВРег(РасширениеXSL), РасширениеPDF);
       ПолноеИмяФайлаPDF        = СтрЗаменить(ПолноеИмяФайлаPDF, "\", "/");      
             
       Document.storeToURL(ПолноеИмяФайлаPDF, Массив2);
       Document.close(-1);        //Закрыть документ

     
       //Контрольная очистка переменных

       Document     = Неопределено;
       Desktop     = Неопределено;
     
       //Удаление временного файла

//.............................



и все бы хорошо но картинка сохраняется горизонтально (как портрет)
а надо вертикально альбомная. Подскажите пожалуйста функцию которая разворачивает картинку на этапе работы с Open Office

aatm

и все бы хорошо но картинка сохраняется горизонтально (как портрет)
а надо вертикально альбомная. Подскажите пожалуйста функцию которая разворачивает картинку на этапе работы с Open Office

Yakov

То есть этот код относится к 1с?
И программа должна выгружать данные в электронную таблицу?
Задача - поменять формат страницы при печати на альбомный?

aatm

#3
Да. При выгрузке из 1С-ки создаётся временный файл ОО из которого средствами OpenOffice создаётся файл PDF

aatm

Пробовал через службу PageProperties

МойСтиль.IsLandscape=1; не работает
в описании написано Описание
determins если страница формата пейзаж тип булево. почему то не работает... пробовал 0 или 1
может как то можно обратиться к листу?

Hasim

МойСтиль.IsLandscape=1 это для проверки на альбомность == МойСтиль.IsLandscape=True

If МойСтиль.IsLandscape=True Then
...

aatm

Я в ОО как слон в фарфоре. Вы мне как УО на пальцах объясните

aatm

       Скрипт.eval("Массив=new Array()");       
        Массив             = Скрипт.eval("Массив");   
        Скрипт.eval("Массив
  • = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
            Скрипт.eval("Массив
  • .Name     = 'Hidden'");
            Скрипт.eval("Массив
  • .Value = true");
            Скрипт.AddCode("function SetItem(ind,val){Массив[ind]=val}");       
            Скрипт.AddObject("ServiceManager",ServiceManager);
            Desktop         = ServiceManager.createInstance("com.sun.star.frame.Desktop");       
            Document         = Desktop.LoadComponentFromURL("file:///" + ПолноеИмяФайлаXLS, "_blank", 0, Массив);   
        Стили = Document.StyleFamilies.getByName("PageStyles");
        Для поз = 0 по Стили.count - 1 Цикл
            МойСтиль = Стили.getByIndex(поз);
            МойСтиль.ScaleToPagesX= 1; // уместить на одной странице вширь
            //МойСтиль.PageScale = 50; // масштаб 50%
        КонецЦикла;       
    в этом куске кода происходит сохранение во временный файл ОО как здесь можно развернуть лист?

aatm

можно как-нибудь через стиль развернуть? или как к листу обратиться подскажите

aatm

где все знатоки OpenOffice? 4 часа на форуме ни одного внятного ответа

Hasim

Знатоки сдулись! Вопрос то непростой.
Проще всего явно указывать ширину и высоту листа.

Для альбомного:
МойСтиль.Width = 29700
МойСтиль.Height = 21000

Для портретного:
МойСтиль.Width = 21000
МойСтиль.Height = 29700




aatm

Получилось!!! Супер! Просто-то как!!! Hasim МОЗГ!