Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

21 Март 2019, 01:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: как программно развернуть лист в альбомный?  (Прочитано 9723 раз)
0 Пользователей и 1 Гость смотрят эту тему.
aatm
Участник
**
Offline Offline

Сообщений: 20


« Стартовое сообщение: 5 Сентябрь 2012, 08:44 »

есть функция сохраняющая в 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
« Последнее редактирование: 5 Сентябрь 2012, 10:16 от Helen » Записан
aatm
Участник
**
Offline Offline

Сообщений: 20


« Ответ #1: 5 Сентябрь 2012, 08:46 »

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

Сообщений: 2 385


WWW
« Ответ #2: 5 Сентябрь 2012, 10:16 »

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

aatm
Участник
**
Offline Offline

Сообщений: 20


« Ответ #3: 5 Сентябрь 2012, 11:01 »

Да. При выгрузке из 1С-ки создаётся временный файл ОО из которого средствами OpenOffice создаётся файл PDF
« Последнее редактирование: 5 Сентябрь 2012, 11:23 от aatm » Записан
aatm
Участник
**
Offline Offline

Сообщений: 20


« Ответ #4: 5 Сентябрь 2012, 11:09 »

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

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

Сообщений: 754


Woe from wit


« Ответ #5: 5 Сентябрь 2012, 11:18 »

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

If МойСтиль.IsLandscape=True Then
...
Записан
aatm
Участник
**
Offline Offline

Сообщений: 20


« Ответ #6: 5 Сентябрь 2012, 11:24 »

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

Сообщений: 20


« Ответ #7: 5 Сентябрь 2012, 11:31 »

       Скрипт.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
Участник
**
Offline Offline

Сообщений: 20


« Ответ #8: 5 Сентябрь 2012, 11:39 »

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

Сообщений: 20


« Ответ #9: 5 Сентябрь 2012, 12:45 »

где все знатоки OpenOffice? 4 часа на форуме ни одного внятного ответа
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #10: 5 Сентябрь 2012, 12:56 »

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

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

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



Записан
aatm
Участник
**
Offline Offline

Сообщений: 20


« Ответ #11: 5 Сентябрь 2012, 13:03 »

Получилось!!! Супер! Просто-то как!!! Hasim МОЗГ!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!