Каталог решений - Создание PDF из OpenOffice.

Создание PDF из OpenOffice.

Создание PDF из OpenOffice.

В наличии

Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.

2010.07.04 В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается.

Категория:

Описание

Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается 🙁

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Если
Письмо.Основание.Пустая() Тогда
        Возврат
    КонецЕсли;

    // Открыть OpenOffice
   
Попытка
       
ServiceManager = Новый COMОбъект(«com.sun.star.ServiceManager»);
    Исключение
        Возврат
// опен офис не установлен 🙁
   
КонецПопытки;

    // получим печатную форму и запишем её во временный XLS файл
   
Заказ = Письмо.Основание.ПолучитьОбъект();

    //Получим печатную форму
   
Расшифровка=Новый Структура;
   
Расшифровка.Вставить(«СсылкаНаВнешнююОбработку»,Константы.ПФСчетаДляКлиента.Получить());
   
Расшифровка.Вставить(«ВидПечатнойФормы»,Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
   
Расшифровка.Вставить(«НомерСтроки»,1);
   
тд = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Заказ, Расшифровка);

    ВременныйФайл =ПолучитьИмяВременногоФайла();
   
ВременныйФайлXLS =ВременныйФайл + «.xls»;
   
ВременныйФайлPDF =ВременныйФайл + «.pdf»;
   
тд.Записать(ВременныйФайлXLS, ТипФайлаТабличногоДокумента.XLS97);

    // Преобразовываем временный xls файл В PDF
   
Desktop        = ServiceManager.createInstance(«com.sun.star.frame.Desktop»);

    НастройкиОткрытия = Новый COMSafeArray(«VT_VARIANT», 1);
   
PropertyValue = ServiceManager.Bridge_GetStruct(«com.sun.star.beans.PropertyValue»);
   
PropertyValue.Name = «Hidden»;
   
PropertyValue.Value = Истина;
   
НастройкиОткрытия.SetValue(0, PropertyValue);
   
ВременныйФайлXLS_какУРЛ = «file:///» + СтрЗаменить(ВременныйФайлXLS, «\», «/»); // приводим путь к файлу из виндового формата в опен офисный

    // Откроем файл в опене офисе
    ОпенОфис = Desktop.LoadComponentFromURL(ВременныйФайлXLS_какУРЛ, «_blank», 0, НастройкиОткрытия);

    //ПараметрыСтраницы = ОпенОфис.createInstance(«com.sun.star.style.PageStyle»);
    //ПараметрыСтраницы.ScaleToPagesX = 1;
    //
    // Установим масштаб, чтобы счёт помещался на одной странице вширь
    // страниц почему-то много, поэтому устанавливаем масштаб для всех
   
Стили = ОпенОфис.StyleFamilies.getByName(«PageStyles»);
    Для
поз = 0 по Стили.count 1 Цикл
       
МойСтиль = Стили.getByIndex(поз);
       
МойСтиль.ScaleToPagesX = 1; // уместить на одной странице вширь
        //МойСтиль.PageScale = 50; // масштаб 50%
   
КонецЦикла;

    НастройкиСохранения = Новый COMSafeArray(«VT_VARIANT», 1);
   
PropertyValue = ServiceManager.Bridge_GetStruct(«com.sun.star.beans.PropertyValue»);
   
PropertyValue.Name = «FilterName»;
   
PropertyValue.Value = «calc_pdf_Export»;
   
НастройкиСохранения.SetValue(0, PropertyValue);

    ВременныйФайлPDF_какУРЛ = «file:///» + СтрЗаменить(ВременныйФайлPDF, «\», «/»); // приводим путь к файлу из виндового формата в опен офисный
   
ОпенОфис.storeToURL(ВременныйФайлPDF_какУРЛ, НастройкиСохранения); // сохранили PDF файл
   
ОпенОфис.close(-1);
   
ОпенОфис = Неопределено;

    // С опеном офисом разобрались. Прикрепляем вложение к письму и удаляем временные файлы.
    //Файл = Новый Файл(ВременныйФайлPDF);
   
объектПисьмо = Письмо.ПолучитьОбъект();
   
стрВложение = объектПисьмо.Вложения.Добавить();
   
стрВложение.ИмяФайла = «Счёт » + Строка(Заказ.Номер) + «.pdf»;
   
стрВложение.Файл = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ВременныйФайлPDF));
   
объектПисьмо.Записать();
    Попытка
       
УдалитьФайлы(ВременныйФайлXLS);
       
УдалитьФайлы(ВременныйФайлPDF);
    Исключение
    КонецПопытки;

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

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