Имя: Пароль:
1C
1С v8
Сохранить в PDF из OpenOffice или LibreOffice с паролем
0 Paradox
 
23.06.14
13:31
Всем привет, кто нибудь сталкивался с задачей программного создания PDF-файла, защищенного паролем на открытие, из OpenOffice?
Сам файл создать получается, но не пойму, как же передать туда параметры, что бы при сохранении файл защищался паролем. Приведу код, может где косяк. Код нашел на мисте...но он что то пароль не получается установить.

Спасибо!


Процедура КнопкаВыполнитьНажатие(Кнопка)

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
    
    Попытка
        ServiceManager     = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Сообщить("Не смог!");
    КонецПопытки;
    
    ВременныйФайл =ПолучитьИмяВременногоФайла();
    ВременныйФайлXLS =ВременныйФайл + ".xls";
    ВременныйФайлPDF =ВременныйФайл + ".pdf";
    ТабДок.Записать(ВременныйФайлXLS, ТипФайлаТабличногоДокумента.XLS97);
    
    НастройкиОткрытия = Новый 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     = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    ОпенОфис     = Desktop.LoadComponentFromURL(ВременныйФайлXLS_какУРЛ, "_blank", 0, НастройкиОткрытия);
    
    Стили = ОпенОфис.StyleFamilies.getByName("PageStyles");
    Для поз = 0 по Стили.count - 1 Цикл
        МойСтиль = Стили.getByIndex(поз);
        МойСтиль.ScaleToPagesX = 1; // уместить на одной странице вширь
        //МойСтиль.PageScale = 50; // масштаб 50%
    КонецЦикла;

    НастройкиСохранения = Новый COMSafeArray("VT_VARIANT", 2);
    
    //Указали, что сохранили в PDF
    PropertyValue         = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    PropertyValue.Name     = "FilterName";
    PropertyValue.Value = "calc_pdf_Export";
    НастройкиСохранения.SetValue(0, PropertyValue);
    
    //Дополнительные параметры сохранения файла PDF
    PropertyValue1         = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    PropertyValue1.Name = "FilterData";
    
    МассивПараметра = Новый COMSafeArray("VT_VARIANT", 41);
    
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 0, "UseLosslessCompression", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 1, "Quality", 0, 90);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 2, "ReduceImageResolution", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 3, "MaxImageResolution", 0, 300);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 4, "UseTaggedPDF", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 5, "SelectPdfVersion", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 6, "ExportNotes", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 7, "ExportBookmarks", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 8, "OpenBookmarkLevels", 0, -1);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 9, "UseTransitionEffects", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 10, "IsSkipEmptyPages", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 11, "IsAddStream", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 12, "FormsType", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 13, "ExportFormFields", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 14, "HideViewerToolbar", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 15, "HideViewerMenubar", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 16, "HideViewerWindowControls", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 17, "ResizeWindowToInitialPage", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 18, "CenterWindow", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 19, "OpenInFullScreenMode", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 20, "DisplayPDFDocumentTitle", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 21, "InitialView", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 22, "Magnification", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 23, "Zoom", 0, 100);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 24, "PageLayout", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 25, "FirstPageOnLeft", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 26, "InitialPage", 0, 1);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 27, "Printing", 0, 2);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 28, "Changes", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 29, "EnableCopyingOfContent", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 30, "EnableTextAccessForAccessibilityTools", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 31, "ExportLinksRelativeFsys", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 32, "PDFViewSelection", 0, 0);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 33, "ConvertOOoTargetToPDFTarget", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 34, "ExportBookmarksToPDFDestination", 0, false);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 35, "_OkButtonString", 0, "");
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 36, "EncryptFile", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 37, "DocumentOpenPassword", 0, "123456789");
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 38, "RestrictPermissions", 0, true);
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 39, "PermissionPassword", 0, "123456789");
    ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, 40, "", 0);
    
    PropertyValue1.Value = МассивПараметра;
    НастройкиСохранения.SetValue(1, PropertyValue1);
    
    
    ВременныйФайлPDF_какУРЛ = "file:///" + СтрЗаменить(ВременныйФайлPDF, "\", "/"); // приводим путь к файлу из виндового формата в опен офисный
    ОпенОфис.storeToURL(ВременныйФайлPDF_какУРЛ, НастройкиСохранения); // сохранили PDF файл
    ОпенОфис.close(-1);
    ОпенОфис = Неопределено;

ЗапуститьПриложение(ВременныйФайлPDF);
    
КонецПроцедуры


Процедура ДобавитьВCOMSafeArrayCOMSafeArray(МассивПараметра, Индекс, Первый, Второй, Третий = Неопределено);
    
    Параметр = Новый COMSafeArray("VT_VARIANT", 4);
    Параметр.SetValue(0, Первый);
    Параметр.SetValue(1, Второй);
    
    Если Третий <> Неопределено Тогда
        Параметр.SetValue(2, Третий);
    КонецЕсли;
    
    Параметр.SetValue(3, 0);
    
    МассивПараметра.SetValue(Индекс, Параметр);
        
КонецПроцедуры
1 Paradox
 
23.06.14
13:58
up =)
2 DS
 
23.06.14
14:09
В "НастройкиСохранения" надо добавить соответствующие параметры. См. https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export
3 Paradox
 
23.06.14
14:54
(2) так вроде бы я передаю эти параметры в НастрокиСохранения
4 Paradox
 
23.06.14
14:54
EncryptFile, DocumentOpenPassword...
5 Paradox
 
23.06.14
14:55
вот именно с созданием ПДФ проблем вообще не возникло...все ясно и прозрачно, но вот с установкой других свойств, как то туманно
6 Paradox
 
24.06.14
08:13
up
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн